Python3正则使用\w却能匹配中文问题
Python3正则使用\w却能匹配中文问题
# 正则中\w等同于[A-Za-z0-9_],但是由于Python3的re库默认使用的是Unicode字符集,导致也能匹配中文
# 通过指定匹配ASCII字符即可解决问题
import re
pattern = re.compile(r'\w+', re.ASCII) # 使用ASCII标志
# pattern = re.compile(r'\w+', re.A) # 使用ASCII标志
text = "hello_世界123"
matches = pattern.findall(text)
print(matches)re模块的多种标志(flags)说明:
re.ASCII/re.A:- 使
\w,\W,\b,\B,\d,\D,\s, 和\S只匹配ASCII字符,而不是匹配Unicode字符。
- 使
re.IGNORECASE/re.I:- 使匹配对大小写不敏感。例如,
[A-Z]也会匹配小写字母,[a-z]也会匹配大写字母。
- 使匹配对大小写不敏感。例如,
re.MULTILINE/re.M:- 多行模式。影响
^和$的行为。^匹配字符串的开始以及每行的开始(紧跟在每个换行符之后),$匹配字符串的结束以及每行的结束(紧跟在每个换行符之前)。
- 多行模式。影响
re.DOTALL/re.S:- 使
.(点号)匹配任何字符,包括换行符。默认情况下,.不匹配换行符。
- 使
re.VERBOSE/re.X:- 详细模式。这允许你组织正则表达式,使其更易于阅读。在该模式下,空白字符被忽略,除非在字符类中或被转义,且
#可用于引入注释。
- 详细模式。这允许你组织正则表达式,使其更易于阅读。在该模式下,空白字符被忽略,除非在字符类中或被转义,且
re.DEBUG:- 打印关于编译表达式的调试信息。
re.UNICODE/re.U:- 使
\w,\W,\b,\B,\d,\D,\s, 和\S执行Unicode匹配而不是ASCII匹配。这是Python 3中的默认行为,因此通常不需要显式设置。
- 使
也可以组合使用,例如:re.I | re.M。