regex Python和正则表达式与Unicode

cyvaqqii  于 2023-08-08  发布在  Python
关注(0)|答案(2)|浏览(86)

我需要从字符串“ب س م ا ل ل ه ا ل ر ح م ن ا ل ر ح يم”中删除一些Unicode符号
我知道他们肯定存在。我试探着:

re.sub('([\u064B-\u0652\u06D4\u0670\u0674\u06D5-\u06ED]+)', '', 'بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ')

字符串
但不管用字符串保持不变。我做错了什么?

kcugc4gi

kcugc4gi1#

您使用的是python 2.x还是3.0?
如果您使用的是2.x,请尝试使用'u'将正则表达式字符串设置为Unicode转义字符串。因为它是正则表达式,所以最好将正则表达式字符串设置为原始字符串,并使用“r”。另外,将整个模式放在括号中也是多余的。

re.sub(ur'[\u064B-\u0652\u06D4\u0670\u0674\u06D5-\u06ED]+', '', ...)

字符串
http://docs.python.org/tutorial/introduction.html#unicode-strings
编辑:
使用re.UNICODE/re.U/(?)u)标志,但它只影响字符类别名,如\w或\b,此模式不使用这些别名中得任何一个,因此不会受到影响.

vdzxcuhz

vdzxcuhz2#

使用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的文章The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

相关问题