如何从字符串列表中提取含指定字符序列的单词?正则尝试遇阻
嘿,我来帮你搞定这个提取包含特定字符序列单词的问题!你想要从每个字符串里挑出带"dd"的单词,其实有两种简单好用的方法,咱们一步步说:
方法一:不用正则,直接分割筛选(简单直观)
这个方法最容易理解,先把每个字符串按空格分割成单词列表,再筛选出包含"dd"的单词就行:
l1 = ["grad madd have", "ddim middle left"] result = [] for s in l1: # 按空格分割成独立单词 words = s.split() # 筛选出包含"dd"的单词 matched_words = [word for word in words if 'dd' in word] result.append(matched_words) print(result) # 输出: [["madd"], ["ddim", "middle"]]
方法二:用正则表达式精准匹配单词
如果一定要用正则,你原来的模式问题在于匹配范围不对——它会把空格甚至多个单词连在一起匹配。我们需要精准匹配包含"dd"的完整单词,可以用这个模式:r'\b\w*dd\w*\b'
\b:匹配单词边界,确保我们找的是完整的单词\w*:匹配任意数量的字母/数字/下划线(如果你的单词包含特殊字符,可以换成[^ ]*,表示除空格外的任意字符)dd:我们要定位的目标字符序列
代码示例:
import re l1 = ["grad madd have", "ddim middle left"] result = [re.findall(r'\b\w*dd\w*\b', s) for s in l1] print(result) # 输出: [["madd"], ["ddim", "middle"]]
为什么你原来的正则没成功?
你用的r'(\b.*?dd.*\s+)'有两个核心问题:
.*\s+会匹配到单词后面的空格,甚至会把多个连续含"dd"的单词连起来(比如第二个字符串里的"ddim middle "会被当成一个匹配项)- 这个模式不会精准定位单个单词,而是匹配从单词开头到下一个空格的片段,结果里会带空格,完全不符合你的需求
这样调整后就能得到你想要的结果啦!
内容的提问来源于stack exchange,提问作者mikeL
相关产品推荐
相关产品推荐

