Python正则匹配整行问题:如何精准匹配独立的foo而非foobar
解决独立单词"foo"的匹配问题
嘿,我来帮你搞定这个问题!你现在遇到的问题是因为^foo$的匹配逻辑和你预期的不一样——这个正则是用来匹配整个字符串完全等于foo的情况,但你的文件内容是foo bar foobar,整个字符串显然不是单独的foo,所以返回空列表很正常。
要匹配文本里独立的foo(也就是不包含在其他单词里的foo),最常用的方法是用单词边界\b,它会匹配单词的起始或结束位置,完美区分独立的foo和foobar里的foo。
修改后的代码如下:
import re code = open('play.txt').read() print(code) # 使用单词边界匹配独立的foo print(re.findall(r'\bfoo\b', code))
运行这段代码后,就会输出['foo'],正好是你想要的结果。这里用原始字符串r''是为了避免Python对反斜杠\进行转义,保证正则表达式能正确识别\b。
如果你不想用单词边界,也可以用环视断言来匹配前后是空白或字符串首尾的情况,比如:
# 匹配前后为空白/字符串首尾的foo,只捕获foo本身 print(re.findall(r'(?:^|\s)(foo)(?:\s|$)', code))
不过这种写法比单词边界要繁琐一些,推荐优先用\b的方案。
内容的提问来源于stack exchange,提问作者Yotam
相关产品推荐
相关产品推荐

