44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
|
|
import re
|
|||
|
|
|
|||
|
|
MAX_TEXT_LENGTH = 2000
|
|||
|
|
|
|||
|
|
|
|||
|
|
def pdd_truncate_text(content: str, max_length: int = MAX_TEXT_LENGTH) -> str:
|
|||
|
|
if len(content) <= max_length:
|
|||
|
|
return content
|
|||
|
|
return content[: max_length - 3] + "..."
|
|||
|
|
|
|||
|
|
|
|||
|
|
def pdd_split_long_text(content: str, max_length: int = MAX_TEXT_LENGTH) -> list[str]:
|
|||
|
|
chunks = []
|
|||
|
|
remaining = content
|
|||
|
|
while remaining:
|
|||
|
|
if len(remaining) <= max_length:
|
|||
|
|
chunks.append(remaining)
|
|||
|
|
break
|
|||
|
|
split_at = max_length
|
|||
|
|
for punct in ("\n", "。", "!", "?", ";", ".", "!", "?", ";"):
|
|||
|
|
pos = remaining[:max_length].rfind(punct)
|
|||
|
|
if pos > max_length // 2:
|
|||
|
|
split_at = pos + 1
|
|||
|
|
break
|
|||
|
|
chunks.append(remaining[:split_at])
|
|||
|
|
remaining = remaining[split_at:]
|
|||
|
|
return chunks
|
|||
|
|
|
|||
|
|
|
|||
|
|
def pdd_strip_markdown(content: str) -> str:
|
|||
|
|
content = re.sub(r"\[([^\]]+)\]\([^)]+\)", r"\1", content)
|
|||
|
|
content = re.sub(r"\*\*([^*]+)\*\*", r"\1", content)
|
|||
|
|
content = re.sub(r"\*([^*]+)\*", r"\1", content)
|
|||
|
|
content = re.sub(r"`([^`]+)`", r"\1", content)
|
|||
|
|
content = re.sub(r"^#{1,6}\s+", "", content, flags=re.MULTILINE)
|
|||
|
|
content = re.sub(r"^\s*[-*+]\s+", "• ", content, flags=re.MULTILINE)
|
|||
|
|
content = re.sub(r"^\s*\d+\.\s+", "", content, flags=re.MULTILINE)
|
|||
|
|
content = re.sub(r"\n{3,}", "\n\n", content)
|
|||
|
|
return content.strip()
|
|||
|
|
|
|||
|
|
|
|||
|
|
def pdd_format_order_card(order_sn: str) -> str:
|
|||
|
|
return f"📦 订单编号: {order_sn}\n点击查看详情"
|