尝试使用re或regex将非ASCII字符串与其自身匹配。我已经阅读了有关非ASCII / unicode的其他帖子,并尝试添加unicode标志,但无济于事:
ptrdiff_t
我希望我错过了一些明显的东西。任何帮助非常感谢!
答案 0 :(得分:2)
请注意,作为正则表达式模式,s2
内部有at at_end
模式。
In [62]: re.compile(s2, re.DEBUG)
literal 226
literal 132
literal 155
...
at at_end
...
literal 226
literal 132
literal 144
这是因为,作为utf-8编码的字符串,s2
是
In [61]: s2 = 'ℛℯα∂α♭ℓℯ ♭ʊ☂ η☺т Ѧ$☾ℐℐ'
In [72]: s2
Out[72]: '\xe2\x84\x9b\xe2\x84\xaf\xce\xb1\xe2\x88\x82\xce\xb1\xe2\x99\xad\xe2\x84\x93\xe2\x84\xaf \xe2\x99\xad\xca\x8a\xe2\x98\x82 \xce\xb7\xe2\x98\xba\xd1\x82 \xd1\xa6$\xe2\x98\xbe\xe2\x84\x90\xe2\x84\x90'
并注意$
中有s2
:
In [75]: '$' in s2
Out[75]: True
要防止将$
解释为at at_end
模式,请使用re.escape
转义模式中的所有非字母数字字符:
In [67]: pat = re.compile(re.escape(s2))
In [68]: pat.search(s2)
Out[68]: <_sre.SRE_Match at 0x7feb6b44dd98>
转义unicode模式同样如此:
In [78]: us2 = unicode(s2,'utf-8')
In [79]: re.search(re.escape(us2), us2)
Out[79]: <_sre.SRE_Match at 0x7feb6b44ded0>
因为
In [81]: u'$' in us2
Out[81]: True