Python正则表达式中的%号单词边界
我想要找到所有的 1%
,并且要确保它是一个完整的词。用下面这段Python代码却没有找到任何结果。我想要找到前两个 1%
的完整词,但不想找到作为最后一个词的一部分的 0.1%
。所以,确保是完整词这一点很重要。
matches = re.finditer(r'\b1%\b', '1% of 100 is not 1% of 10 its 0.1%', re.I)
for match in matches:
print(match)
有什么好主意吗?
1 个回答
0
来自 python re
文档
注意,正式来说,
\b
是用来表示一个\w
字符和一个\W
字符之间的边界(或者反过来),或者是\w
字符和字符串的开头或结尾之间的边界。
要知道,数字属于 \w
,而点(.)属于 \W
,所以在 .1
中是有边界的。而 %
和空格都属于 \W
,所以在 %
中是没有边界的。
你可以使用负向查找来排除前面带点的1,方法如下:
import re
matches = re.finditer(r'(?<![.])1%', '1% of 100 is not 1% of 10 its 0.1%', re.I)
for match in matches:
print(match)
这会输出:
<re.Match object; span=(0, 2), match='1%'>
<re.Match object; span=(17, 19), match='1%'>
注意,我使用了 [.]
,因为这里需要的是字面上的点,而不是表示任何字符的点。