You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从字符串列表中提取含指定字符序列的单词?正则尝试遇阻

嘿,我来帮你搞定这个提取包含特定字符序列单词的问题!你想要从每个字符串里挑出带"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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:00:24