bsn*_*bsn 81 python regex character-properties
我需要从字符串'بسماللهالرحمنالرحيم'中删除一些Unicode符号
我知道他们肯定存在于这里.我试过了:
re.sub('([\u064B-\u0652\u06D4\u0670\u0674\u06D5-\u06ED]+)', '', '?????? ??????? ???????????? ??????????')
Run Code Online (Sandbox Code Playgroud)
但它不起作用.字符串保持不变.我究竟做错了什么?
ʞɔı*_*ɔıu 107
你使用的是python 2.x还是3.0?
如果您使用的是2.x,请尝试使用'u'将正则表达式字符串设置为unicode-escape字符串.由于它是正则表达式,所以最好使用'r'将正则表达式字符串设为原始字符串.此外,将整个模式放在括号中是多余的.
re.sub(ur'[\u064B-\u0652\u06D4\u0670\u0674\u06D5-\u06ED]+', '', ...)
Run Code Online (Sandbox Code Playgroud)
http://docs.python.org/tutorial/introduction.html#unicode-strings
编辑:
对于unicode正则表达式使用re.UNICODE/re.U /(?u)标志也是一种好习惯,但它只影响\ w或\ b之类的字符类别名,其中此模式不使用任何字符串别名,因此不会受到影响.
nos*_*klo 69
使用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
??? ???? ?????? ??????
Run Code Online (Sandbox Code Playgroud)
阅读Joel Spolsky所说的绝对最低限度的软件开发人员的文章,正确地必须知道Unicode和字符集(没有借口!)