python - 将文本与 python 中的多个正则表达式匹配

标签 python regex multiple-matches

我有一个包含 11 个文件的文本语料库,每个文件大约有 190000 行。 我有 10 个字符串,其中一个或多个可能出现在上述语料库的每一行中。

当我遇到这10个字符串中的任何一个时,我需要单独记录该行中出现的那个字符串。 为每一行循环正则表达式并标记它的蛮力方式需要很长时间。有没有一种有效的方法来做到这一点?

我找到了一篇文章 ( Match a line with multiple regex using Python),它提供了 TRUE 或 FALSE 输出。但是我如何从行中记录匹配的正则表达式:

any(regex.match(line) for regex in [regex1, regex2, regex3])

编辑:添加示例

regex = ['quick','brown','fox']
line1 = "quick brown fox jumps on the lazy dog" # i need to be able to record all of quick, brown and fox
line2 = "quick dog and brown rabbit ran together" # i should record quick and brown
line3 = "fox was quick an rabit was slow" # i should be able to record quick and fox.

遍历正则表达式并记录匹配的一个是解决方案之一,但看看规模 (11 * 190000 * 10),我的脚本现在运行了一段时间。我需要在我的工作中多次重复这一点。所以我在寻找一种更有效的方法。

最佳答案

下面的方法是在你想要匹配的情况下。如果您需要列表中的正则表达式来触发匹配,那么您就不走运了,可能需要循环。

基于 the link you have provided :

import re
regexes= 'quick', 'brown', 'fox'
combinedRegex = re.compile('|'.join('(?:{0})'.format(x) for x in regexes))

lines = 'The quick brown fox jumps over the lazy dog', 'Lorem ipsum dolor sit amet', 'The lazy dog jumps over the fox'

for line in lines:
    print combinedRegex.findall(line)

输出:

['quick', 'brown', 'fox']
[]
['fox']

这里的要点是您不要遍历正则表达式,而是将它们组合起来。 与循环方法的不同之处在于 re.findall 不会找到重叠的匹配项。例如,如果您的正则表达式是:regexes= 'bro', 'own',则上面几行的输出将是:

['bro']
[]
[]

而循环方法会导致:

['bro', 'own']
[]
[]

关于python - 将文本与 python 中的多个正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13030459/

相关文章:

php - 使用 PHP 获取主要文章图像

VB6 中的正则表达式多重匹配

python - Emacs 24.3 python 模式在函数结束后错误地缩进代码

python - 在一行 Python 3.2.2 中打印一个 for 循环

regex - Google Analytics - 根据查询参数对 URL 进行分组

regex - 在Groovy中使用正则表达式替换字符串中的所有匹配项

java - 使用正则表达式检查字符串中重复或分散的字符的多次出现

python - Django : TemplateDoesNotExist at/. ../

python - 将目录中的文件批量导入到python脚本中

php - 正则表达式 - 如何匹配除严格单词之外的所有单词?