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
。