Python 和 Unicode 正则表达式
- 2025-02-13 08:35:00
- admin 原创
- 57
问题描述:
我需要从字符串 'ِsِْ ِِِ َِْٰ ِِِِِ' 中删除一些 Unicode 符号
我知道它们肯定存在。我试过:
re.sub('([/u064B-/u0652/u06D4/u0670/u0674/u06D5-/u06ED]+)', '', 'بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ')
但它不起作用。字符串保持不变。我做错了什么?
解决方案 1:
您使用的是 python 2.x 还是 3.0?
如果您使用的是 2.x,请尝试将正则表达式字符串设为 unicode 转义字符串,并使用“u”。由于它是正则表达式,因此最好将正则表达式字符串设为原始字符串,并使用“r”。此外,将整个模式放在括号中是多余的。
re.sub(ur'[/u064B-/u0652/u06D4/u0670/u0674/u06D5-/u06ED]+', '', ...)
http://docs.python.org/tutorial/introduction.html#unicode-strings
编辑:
对于 unicode 正则表达式,使用 re.UNICODE/re.U/(?u) 标志也是一种很好的做法,但它只会影响字符类别名,如 \w 或 \b,而此模式不使用任何字符类别名,因此不会受到影响。
解决方案 2:
使用unicode字符串。使用re.UNICODE标志。
>>> myre = re.compile(ur'[/u064B-/u0652/u06D4/u0670/u0674/u06D5-/u06ED]+',
re.UNICODE)
>>> myre
<_sre.SRE_Pattern object at 0xb20b378>
>>> mystr = u'بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ'
>>> result = myre.sub('', mystr)
>>> len(mystr), len(result)
(38, 22)
>>> print result
بسم الله الرحمن الرحيم
阅读Joel Spolsky的文章《每个软件开发人员绝对、肯定必须了解的关于 Unicode 和字符集的最低限度(没有借口!)》
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD