首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python正则表达式忽略模式

Python正则表达式忽略模式
EN

Stack Overflow用户
提问于 2020-03-03 06:43:20
回答 2查看 91关注 0票数 1

下面列出了两个关键字的列表:

代码语言:javascript
复制
keywords = ["Azure", "Azure cloud"]

但是python找不到第二个关键字"Azure cloud“

代码语言:javascript
复制
>>> keywords = ["Azure", "Azure cloud"]
>>> r = re.compile('|'.join([re.escape(w) for w in keywords]), flags=re.I)
>>> word = "Azure and Azure cloud"
>>> r.findall(word)
['Azure', 'Azure']

我期待这样的输出:'Azure','Azure','Azure cloud‘

任何指南/帮助都将不胜感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-03 06:49:30

你可以进行多次搜索。

代码语言:javascript
复制
import itertools
import re

keywords = ["Azure", "Azure cloud"]
patterns = [re.compile(re.escape(w), flags=re.I) for w in keywords]
word = "Azure and Azure cloud"
results = list(itertools.chain.from_iterable(
    r.findall(word) for r in patterns
))
print(results)

产出:

代码语言:javascript
复制
['Azure', 'Azure', 'Azure cloud']

追加

如果我有单词= "Azure and azure cloud“--我的输出是'Azure','azure','azure‘--那么第二个关键字"Azure”是小的,如果我必须得到与"azure“这个”关键字“列表完全匹配的单词,那么代码中需要做什么修改?

标志re.I的意思是忽略大小写.所以把这个去掉就行了。

代码语言:javascript
复制
patterns = [re.compile(re.escape(w)) for w in keywords]

附录2

很抱歉,我上次的评论很模糊,所以我希望模式匹配忽略这个情况,但是在获取输出时,我希望关键字具有与“关键字”列表中的完全相同的情况,而不是在"word“中。

抱歉误会了。试试这个:

代码语言:javascript
复制
import re

keywords = ["Azure", "azure cloud"]
patterns = [re.compile(w, flags=re.I) for w in keywords]
word = "Azure and azure cloud"
results = [
    match_obj.re.pattern
    for r in patterns
    for match_obj in r.finditer(word)
]
print(results)

产出:

代码语言:javascript
复制
['Azure', 'Azure', 'azure cloud']

我不确定这是一种有效的方式,但它有效。

请注意,我删除了re.escape,因为它会导致空间转义,因此结果是:

代码语言:javascript
复制
['Azure', 'Azure', 'azure\\ cloud']
票数 1
EN

Stack Overflow用户

发布于 2020-03-03 07:00:31

findall找到所有不重叠的匹配。在交替的情况下,它会尝试从左到右的各种情况。

所以这里发生的是regex引擎到达Azure cloud,设法匹配Azure和.开始在cloud中再次查找它,因为它能够将Azure与某些东西匹配。

如果您期望"Azure和Azure cloud“生成"Azure”、"Azure“和"Azure Cloud”,则需要单独运行每个模式,而不是一个单独的交替模式。

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

https://stackoverflow.com/questions/60501452

复制
相关文章

相似问题

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