Python:定义正则表达式的并集

标签 python regex

我有一个模式列表,比如

list_patterns = [': error:', ': warning:', 'cc1plus:', 'undefine reference to']

我想做的是生成所有这些元素的联合,生成一个正则表达式,匹配 list_patterns 中的每个元素 [但可能不匹配任何不在 list_patterns 中的 re -- msw]

re.compile(list_patterns)

这可能吗?

最佳答案

有几种方法可以做到这一点。最简单的是:

list_patterns = [': error:', ': warning:', 'cc1plus:', 'undefine reference to']
string = 'there is an : error: and a cc1plus: in this string'
print re.findall('|'.join(list_patterns), string)

输出:

[': error:', 'cc1plus:']

只要连接您的搜索模式不会破坏正则表达式(例如,如果其中一个包含正则表达式特殊字符,如左括号),这就很好。你可以这样处理:

list_patterns = [': error:', ': warning:', 'cc1plus:', 'undefine reference to']
string = 'there is an : error: and a cc1plus: in this string'
pattern = "|".join(re.escape(p) for p in list_patterns)
print re.findall(pattern, string)

输出是一样的。但它所做的是通过 re.escape() 传递每个模式以转义任何正则表达式特殊字符。

现在您使用哪一个取决于您的模式列表。它们是正则表达式,因此可以假定它们是有效的吗?如果是这样,第一个可能是合适的。如果是字符串,使用第二种方法。

首先,它变得更加复杂,因为通过连接几个正则表达式,您可能会更改分组并产生其他意想不到的副作用。

关于Python:定义正则表达式的并集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3274027/

相关文章:

php - 如何制作正则表达式以使用 php 从以下代码中抓取复杂数组

python - 类方法属性继承

python - 用numpy找到与中位数最大差异的索引

python - 将切片索引存储为对象

Javascript 正则表达式 - 开头没有空格 + 中间允许空格

java - 在 Pattern 对象中为 java 字符串设置正则表达式

regex - 如何使用 C# 正则表达式的白名单拒绝名称(人和公司)?

javascript - 正则表达式条件不适用于 polymer 纸张输入,如何在纸张输入上仅允许小数?

python - 如何在Python数据框中将一些值剪切到不同的列中?

python - 终止 tcpdump 子进程后获取包统计信息