Python 3
import re
P = re.compile(r'[\s\t]+')
re.sub(P, ' ', '\xa0 haha')
' haha'
Python 2
import re
P = re.compile(r'[\s\t]+')
re.sub(P, u' ', u'\xa0 haha')
u'\xa0 haha'
我希望Python 3的行为,但在Python 2代码中。为什么正则表达式模式无法与Python 2中的\xa0
之类的类似空格的代码点匹配,但在Python 3中正确匹配这些代码点?
答案 0 :(得分:5)
使用re.UNICODE
标志:
>>> import re
>>> P = re.compile(r'[\s\t]+', flags=re.UNICODE)
>>> re.sub(P, u' ', u'\xa0 haha')
u' haha'
没有标志,只匹配ASCII空格; \xa0
不是ASCII标准的一部分(它是Latin-1代码点)。
{3}中的re.UNICODE
标志是默认标志;如果你想要Python 2(字节串)行为,请使用re.ASCII
。
请注意,在字符类中包含\t
没有意义; \t
已经是\s
类的一部分,因此以下内容将与完全相同的输入匹配:
P = re.compile(r'\s+', flags=re.UNICODE)