Python中如何匹配包含指定子串的完整单词?
解决方法:提取包含指定子串的完整单词
嘿,我懂你的痛点——用re.findall(r'replace', a)只能揪出子串本身,但你要的是整个包含这个子串的单词对吧?别担心,调整一下正则表达式就能搞定。
正确的正则写法
我们需要让正则匹配从单词边界开始,包含目标子串,再到单词边界结束的完整内容,代码示例如下:
import re a = 'replacement replace filereplace filereplacer' # 匹配包含'replace'的完整单词 matches = re.findall(r'\b\w*replace\w*\b', a) print(matches) # 输出结果: ['replacement', 'replace', 'filereplace', 'filereplacer']
正则表达式拆解
让我们拆解一下这个正则的各个部分:
\b:表示单词边界,用来界定一个单词的开始或结束(比如空格、标点和字母之间的位置)\w*:匹配任意数量(包括0个)的字母、数字或下划线,用来匹配子串前后的部分replace:你要查找的目标子串- 最后的
\b:再次界定单词的结束,确保我们拿到的是完整单词
为什么原来的写法不行?
你之前用的r'replace'只会在字符串中精准匹配子串本身,每找到一次replace就返回一次,所以得到的是四个子串的列表,而不是包含子串的完整单词。
补充:处理特殊单词
如果你的字符串里有包含连字符、撇号(比如don't)这类非\w字符的单词,可以把\w换成更宽泛的字符集,比如:
# 匹配包含连字符或撇号的单词 matches = re.findall(r'\b[\w\'-]*replace[\w\'-]*\b', a)
内容的提问来源于stack exchange,提问作者Karthikeyan KR
相关产品推荐
相关产品推荐

