【问题标题】:Python find all fuzzy matching sequences in a stringPython 查找字符串中的所有模糊匹配序列
【发布时间】:2015-11-09 08:02:38
【问题描述】:

我有一个很大的字符串,我想在这个字符串中找到所有匹配的输入序列。

例如,我想在以下位置找到防守篮板的所有可能匹配项:

球员 xy 仅在比赛的第三节有 10 个防守篮板,这是一场由 2 支防守篮板率超过 80% 的球队和此外,球员的平均防守篮板数达到了惊人的 3.5

我想找到所有粗体字,然后提取它们。

我设法构建了一个执行提取的脚本,但它只适用于完全匹配。

我在考虑使用difflib.SequenceMatcher,但被卡住了。

【问题讨论】:

  • 我已经可以给你一个先机,看到你已经将regex包含在关键字列表中:正则表达式用于调查包含特定内容的行的文本(例如grep -i rebound将搜索所有包含单词反弹(不区分大小写)的行。找到这些行后,您需要使用正则表达式以外的其他技术来查找这些行中的条目。
  • 你必须先定义什么是同义词。例如对于计算机,“防御”和“防御”是相似的,这一点很明显。其次对我来说,我看到“防守篮板”与“防守篮板”有什么关系,但“防守篮板率”又有什么关系?

标签: python regex


【解决方案1】:

你可以使用正则表达式:

import re

#Find [defence(s)][space][rebound(s)][space][any word]
re.findall('defensive[\w]* rebound[\w]* [\w]+', s)

#Find [rebound(s)][space][any word][space][any word][space][any word]
re.findall('rebound[\w]* [\w]+ [\w]+ [\w]+', s)

findall 返回匹配列表

如果您的所有匹配项都是相同形式的粗体字,您可以使用以下方法提取它们:

re.findall('rebound[ \w]*defence', s)
re.findall('defensive[\w]* rebound[\w]*[ rate]*', s)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-26
    • 2012-02-14
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 2023-01-06
    • 2017-08-03
    • 1970-01-01
    相关资源
    最近更新 更多