如何处理混合案例正则表达式



我有一个要搜索的关键字列表。它们中的大多数不区分大小写,但其中一些区分大小写,例如信息技术的 IT 或 IT。通常,我将所有关键字与"|"连接在一起,并将标志设置为re.I。这将给区分大小写的关键字带来麻烦。有没有简单的方法可以解决这个问题?或者我必须单独搜索区分大小写的?谢谢!

 keywords = ["internal control", "IT",... and many more]
 patterns = r"b(" + "|".join(keywords) + r")b"
 m = re.findall(patterns, text, flags = re.I)
您可以使用

(?-i:...)修饰符关闭此组的不区分大小写的搜索。但它仅适用于Python 3.6+:

import re
s = "Internal control, it IT it's, Keyword2"
keywords = ["internal control", "IT", "keyword2"]
pattern = '|'.join(r'((?-i:b{}b))'.format(re.escape(k)) if k.upper() == k else r'(b{}b)'.format(re.escape(k)) for k in keywords)
print(re.findall(pattern, s, flags=re.I))

指纹:

[('Internal control', '', ''), ('', 'IT', ''), ('', '', 'Keyword2')]

来自 Python 3.6 文档:

(?imsx-imsx:...(

(集合">

i"、"m"、"s"、"x"中的零个或多个字母,可以选择后跟"-",后跟同一集合中的一个或多个字母。 字母设置或删除相应的标志:re。我(忽略 案例(,重新。M(多行(,重新。S(点匹配所有(,然后重新。X(详细(, 对于表达式的一部分。(这些标志在模块中描述 目录。

(将其作为答案发布,因为它的文本太多,无法发表评论(
我仍然认为两个单独的搜索会更干净、更简单。 所以这可能是学术性的:你可以使用条件正则表达式和可选模式修饰符的某种组合,如各自的链接所示。

最新更新