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

如何实现句子中单词的模糊匹配并获取起始索引与匹配内容?

解决方案:模糊匹配获取起始索引与匹配内容

原代码的问题在于find()方法仅支持精确匹配,目标单词ANGLO (UK) LTD转小写后是anglo (uk) ltd,而文本中对应的是anglo (uk) limited,两者无法精确匹配,因此find()返回-1,后续调用match.start()还会报错(因为start_idx不是匹配对象)。

要实现模糊匹配(这里是缩写与全称的匹配),可以用正则表达式的re.search()方法,通过构建灵活的匹配规则来实现:

import re
body = 'Charles D�Silva  |  Technical Officer  Anglo (UK) Limited'
word = 'ANGLO (UK) LTD'

# 构建适配缩写的正则模式:转义特殊字符,将LTD替换为可匹配LTD或Limited的规则
pattern = re.compile(
    re.escape(word.lower()).replace('ltd', r'(limited|ltd)'),
    re.IGNORECASE
)
match_result = pattern.search(body)

if match_result:
    start_index = match_result.start()
    matched_text = match_result.group()
    print(f"起始索引:{start_index}")
    print(f"匹配内容:{matched_text}")
else:
    print("未找到匹配项")

代码说明:

  • re.escape():转义目标单词中的特殊字符(如括号()),避免被正则解析为语法符号。
  • 替换ltd为(limited|ltd):让规则同时匹配缩写LTD和全称Limited。
  • re.IGNORECASE:忽略大小写,无需手动转换文本大小写。
  • match_result.start():获取匹配内容的起始索引;match_result.group():获取完整的匹配文本。

如果需要更通用的模糊匹配(比如允许字符差异、部分单词匹配),可以调整正则规则,例如拆分单词并允许任意间隔字符:

# 通用模糊匹配:拆分目标单词为独立词,允许词间任意非单词字符
words = word.split()
pattern = re.compile(r'\s+'.join([re.escape(w) for w in words]).replace('LTD', r'Limited'), re.IGNORECASE)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:27:47