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

Victor Wang |

我有要搜索的关键字列表。它们中的大多数不区分大小写,但其中的一些区分大小写,例如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)
安德烈·凯斯利(Andrej Kesely)

您可以使用(?-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.I(忽略大小写),re.M(多行),re.S(所有点都匹配)和re.X(详细),用于表达式的一部分。(这些标志在模块内容中描述。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章