首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当模式有相似的文本时,如何使用RegEx获取Python中的所有匹配?

当模式有相似的文本时,如何使用RegEx获取Python中的所有匹配?
EN

Stack Overflow用户
提问于 2016-04-20 15:30:46
回答 1查看 48关注 0票数 3

我有以下示例字符串:

这是对场外电力损失的考验。

我有以下标签:

场外电力,场外电力损失

我试着从绳子上得到所有的火柴。但是,当我有以下代码时:

代码语言:javascript
复制
import re

description = 'this is a test of the loss of offsite power'
all_tags = ['offsite power', 'loss of offsite power']
reg_ex = '|'.join(['\\b%s\\b' % t for t in all_tags])

expression = re.compile(reg_ex, re.IGNORECASE)

matches = re.findall(expression, description)

results = [m for m in matches]

print results

我的结果如下:

代码语言:javascript
复制
['loss of offsite power']

我需要得到标记的两个实例。我知道我可以通过循环遍历每个标签,然后搜索每个标签上的描述,但是在一个搜索中有什么方法可以做到吗?

我的代码是Python2.7,但是我也会接受Python 3的答案。

注意:我的最后关键字列表大约有2000个短语,类似于上面的内容。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-20 15:44:37

非常简单:使用Matthew更新的regex模块,它允许重叠匹配。在Python

代码语言:javascript
复制
import regex as re
string = 'this is a test of the loss of offsite power'

all_tags = ['offsite power', 'loss of offsite power']
reg_ex = '|'.join(['\\b%s\\b' % t for t in all_tags])

expression = re.compile(reg_ex, re.IGNORECASE)

# mind overlapped=True !
matches = re.findall(expression, string, overlapped=True)
print matches
# ['loss of offsite power', 'offsite power']

要获得模块,只需在命令行上执行pip install regex。它也适用于re.finditer()

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36748572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档