Skip to main content
 首页 » 编程设计

python之正则表达式最佳实践 : is it ok to use regex to match multiple phrases

2024年08月26日30Leo_wl

我有一个短语列表,每个短语的长度不应超过 5 个词,我想看看这些短语中是否有某个文本。

我想写这样的东西:

my_phrases = ['Hello world', 'bye world', 'something something'....] 
my_regex = re.compile('|'.join(my_phrases)) 
 
my_iter = re.finditer(my_regex, text) 

但我有点担心这(第 2 行)不被认为是一种好的做法。有人可以告诉我这是否可以吗?如果不是,匹配文本中多个短语的最佳方法是什么?

请您参考如下方法:

我会说你的方法只遗漏了一件事是好的做法:处理原始短语列表中的特殊字符:想象一下列表是

['oh, really?', 'definitely!', 'no, never.'] 

那么你的正则表达式也会匹配“哦,真的是这样”,因为 ?意味着“y”成为可选的,它也会匹配“不,永无止境的故事”,因为“。”表示“任何字符”。

为了使代码成为“最佳实践”,您需要将字符串传递给一个转义此类特殊字符的函数,幸运的是 re.escape 就是这样一个函数,因此您可以简单地使用它来 map 所有字符串:

my_phrases = ['Hello world', 'bye world', 'something something'....] 
my_regex = re.compile('|'.join(map(re.escape, my_phrases))) 
my_iter = re.finditer(my_regex, text) 

或者(更具可读性):

my_phrases = ['Hello world', 'bye world', 'something something'....] 
my_phrases_escaped = map(re.escape, my_phrases) 
my_regex = re.compile('|'.join(my_phrases_escaped)) 
my_iter = re.finditer(my_regex, text)