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

Python如何从部分子串匹配中返回完整匹配单词并生成列表?

解决方法:返回包含指定子串的完整单词

你的问题根源在于当前正则只匹配目标子串本身,findall自然只会返回这些子串片段。要获取包含这些子串的完整单词,有两种简洁的修改思路:

方法一:拆分单词后筛选(直观易读)

先把文本拆分成单个单词,然后逐一检查每个单词(忽略大小写)是否包含任意目标子串,最后收集符合条件的原单词:

def latin_ish_words(text):
    import re
    # 定义需要匹配的子串模式
    target_patterns = ["tion", "ex", "ph", "ost", "ast", "ist"]
    # 拆分出原文本中的所有单词
    original_words = text.split()
    # 筛选:单词小写后包含任意目标子串,就保留原单词
    matching_words = [
        word for word in original_words
        if any(pattern in word.lower() for pattern in target_patterns)
    ]
    return matching_words

# 测试
print(latin_ish_words("This functions as expected"))  # 输出: ['functions', 'expected']

方法二:改进正则匹配整个单词(简洁高效)

调整正则表达式,让它匹配包含任意目标子串的完整单词,配合re.IGNORECASE忽略大小写:

def latin_ish_words(text):
    import re
    # 正则逻辑:匹配任意包含目标子串的单词,\b 表示单词边界,(?:...) 是非捕获组
    pattern = re.compile(r'\b\w*(?:tion|ex|ph|ost|ast|ist)\w*\b', re.IGNORECASE)
    # findall 现在会返回完整的匹配单词
    matches = pattern.findall(text)
    return matches

# 测试
print(latin_ish_words("This functions as expected"))  # 输出: ['functions', 'expected']

补充说明

  • 如果你的文本中包含带标点的单词(比如functions,),可以调整正则的单词边界逻辑,比如把\b替换为更宽松的匹配,或者先清理文本中的标点再处理。
  • 两种方法都能实现需求:第一种更适合新手理解,第二种在处理复杂文本时更灵活。

内容的提问来源于stack exchange,提问作者tnsoom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 07:29:11