Python和Unicode的正则expression式

我需要从string'بسماللهالرحمنالرحيم'中删除一些Unicode符号

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

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

但它不起作用。 string保持不变。 我究竟做错了什么?

你使用Python 2.x或3.0?

如果您使用的是2.x,请尝试使用“u”将正则expression式string设置为unicode转义string。 由于是正则expression式,所以将正则expression式string变成一个原始string是'r'的好习惯。 另外,把你的整个模式放在括号里是多余的。

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

http://docs.python.org/tutorial/introduction.html#unicode-strings

编辑:

对unicode正则expression式使用re.UNICODE / re.U /(?u)标志也是很好的做法,但是它只影响像\ w或\ b这样的字符类别,其中这个模式不会使用任何字符,所以不会受到影响。

使用unicodestring。 使用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和字符集(没有借口!)