使用Unicode的Python和正则表达式

使用Unicode的Python和正则表达式,python,regex,character-properties,Python,Regex,Character Properties,我需要从字符串“بِسْمِاّّهِِّْْننِِِِِِِِِِِِِِِِّّّّّّ 我知道他们肯定在这里。我试过: re.sub('([\u064B-\u0652\u06D4\u0670\u0674\u06D5-\u06ED]+)', '', 'بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ') 但它不起作用。字符串保持不变。我做错了什么?您使用的是python 2.x还是3.0 如果您使用的是2.x,请尝试将正则表达式字符串设置为带有“u”的unic

我需要从字符串“بِسْمِاّّهِِّْْننِِِِِِِِِِِِِِِِّّّّّّ

我知道他们肯定在这里。我试过:

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

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

您使用的是python 2.x还是3.0

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

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

编辑:

对UNICODE正则表达式使用re.UNICODE/re.U/(?U)标志也是一种很好的做法,但它只影响\w或\b之类的字符类别名,这种模式不使用任何别名,因此不会受到字符串的影响。

使用字符串。使用国旗

myre=re.compile(ur'[\u064B-\u0652\u06D4\u0670\u0674\u06D5-\u06ED]+', 关于(UNICODE) >>>迈尔 >>>mystr=u'15766ِْمِاهِِِِِِّّْل >>>结果=myre.sub(“”,mystr) >>>len(mystr),len(result) (38, 22) >>>打印结果 بسم الله الرحمن الرحيم
阅读Joel Spolsky的文章,名为

@nosklo,为什么设置字符数的花括号--{5}不适用于unicode字符,我遇到了一些问题,但是,+工作正常。你有什么想法吗?谢谢@我不知道,如果没有我的魔法水晶球,就没有办法帮上忙。我刚刚测试过,它对我来说很好。如果它不适合你,我建议你问一个新问题,提供你的代码和你得到的结果。如果你想在python中使用
re
,你必须知道它不支持Unicode字符属性(比如
\p{L}
)。是的。
re.UNICODE
标志在这里是无用的,因为它只影响速记字符类
\w
\d
\s
。嗯,不知道可以同时连接
u
r
前缀。太酷了@BalthazarRouberol我在Python 3.6中得到了
SyntaxError:invalid syntax
>>> 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
بسم الله الرحمن الرحيم