正则表达式 HOWTO说特殊序列可以包含在字符类中(强调我的):
以下特殊序列列表并不完整。有关 Unicode 字符串模式的序列和扩展类定义的完整列表,请参阅标准库参考中的正则表达式语法的最后部分。通常,Unicode 版本与 Unicode 数据库中相应类别中的任何字符相匹配。
\d
匹配任何十进制数字;这相当于类[0-9]
。
\D
匹配任何非数字字符;这相当于类[^0-9]
。
\s
匹配任何空白字符;这相当于类[ \t\n\r\f\v]
。
\S
匹配任何非空白字符;这相当于类[^ \t\n\r\f\v]
。
\w
匹配任何字母数字字符;这相当于类[a-zA-Z0-9_]
。
\W
匹配任何非字母数字字符;这相当于类[^a-zA-Z0-9_]
。这些序列可以包含在字符类中。例如,
[\s,.]
是一个将匹配任何空白字符的字符类,或者','
或'.'
。
但是,它看起来\b
不能在字符类中使用。
pattern = r'\bcool\b'
text = "cool"
matches = re.finditer(
pattern=pattern,
string=text.strip(),
flags=re.IGNORECASE
)
if matches:
for match in matches:
print(f"match: {match.group(0): <20} start: {match.start():<5} end: {match.end():<5} pos: {match.endpos:<5}")
---
match: cool start: 0 end: 4 pos: 4
pattern = r'[\b\s]cool\b' # <-----
text = "cool"
matches = re.finditer(
pattern=pattern,
string=text.strip(),
flags=re.IGNORECASE
)
if matches:
for match in matches:
print(f"match: {match.group(0): <20} start: {match.start():<5} end: {match.end():<5} pos: {match.endpos:<5}")
---
No match
请帮助理解这种行为。可以\b
使用,例如,因为它被视为字符类中的退格键?那么它是否记录在某处?
Python 字符类中不可能包含单词边界。标记可以包含在字符类中,但它表示退格字符,而不是单词边界
\b
。因此以下正则表达式无法按预期工作:但是,您可以使用替代而不是尝试的字符类: