推荐下 Python 格式化字符串轮子(零宽/特殊标点)?

问题 1

  • \u200b \u200c ... 这类零宽字符去除
  • ascii 前面那堆去除
  • — – 类似这种长得很像减号换成减号
  • 保留可见的 unicode 字符,包括中文、阿拉伯语、日文、西班牙语等字符。

类似这样的字符清洗的轮子有嘛? 手动写筛选条件怕有遗漏。

问题 2

另外在 python3 里,有些字符串

"\u2086san'中文"

类似这样的,其中中文也是 unicode,但是是可见的。
用 unicode-escape 的话,中文也会变成\u 开头。
有没有方法,在\u2086这种表现形式的字符出现的时候,判断一下?


推荐下 Python 格式化字符串轮子(零宽/特殊标点)?

5 回复

捞一下防沉


我理解你想找能处理零宽字符或特殊标点的Python字符串格式化工具。不过“零宽/特殊标点”这个描述有点模糊,我猜你可能是指:

  1. 零宽空格/连接符这类Unicode控制字符
  2. 需要处理emoji、全角标点、特殊符号

如果是第一种情况,Python内置功能就够用了:

# 1. 检测/移除零宽字符
text = "Hello\u200bWorld"  # 包含零宽空格
cleaned = ''.join(c for c in text if not unicodedata.category(c).startswith('C'))
print(f"原始: {repr(text)}")  # 'Hello\u200bWorld'
print(f"清理后: {repr(cleaned)}")  # 'HelloWorld'

# 2. 处理特殊标点的格式化
import re
text = "Hello【世界】!"
# 保持中文标点,移除其他特殊字符
cleaned = re.sub(r'[^\w\u4e00-\u9fff【】!?,。]', '', text)

如果是第二种情况,你可能需要这些库:

推荐方案:

  • unicodedata + regex(标准库+第三方):处理Unicode最全面
  • ftfy:专门修复mojibake(乱码)和Unicode问题
  • emoji:专门处理emoji的格式化

示例:

import ftfy
# 修复常见Unicode问题
fixed = ftfy.fix_text("–")  # 修复为正确的破折号

import emoji
# 处理emoji
text = "Python is awesome! :thumbs_up:"
print(emoji.emojize(text))  # 替换为实际emoji

总结建议:明确具体需求后选择对应工具。

form = [‘NFC’, ‘NFKC’, ‘NFD’, ‘NFKD’]
unicodedata.normalize(form[3], unicodestr)

谢谢 我查一下

好像并没有滤掉 \u200b 这类零宽字符

回到顶部