这个问题已经有答案了:
How to write word boundary inside character class in python without losing its meaning? I wish to add underscore(_) in definition of word boundary(\b)(1个答案)
13天前关闭
正则表达式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
可以使用吗?因为它在字符类中被视为退格键?那是不是有文件记录
1条答案
按热度按时间9fkzdhlc1#
在Python字符类中不可能包含单词边界。
\b
标记 * 可以 * 包含在字符类中,但它表示退格字符,而不是单词边界。因此,下面的正则表达式不能按预期工作:但是,你可以使用一个交替而不是尝试的字符类: