当我尝试使用正则表达式在其他字符串中查找字符串时,它无法按预期工作。下面是一个例子:

import re
message = 'I really like beer, but my favourite beer is German beer.'
keywords = ['beer', 'german beer', 'german']

regex = re.compile("|".join(keywords))
regex.findall(message.lower())

结果:
['beer', 'beer', 'german beer']

但预期的结果是:
['beer', 'beer', 'german beer', 'german']

另一种方法可能是:
results = []
for k in keywords:
    regex = re.compile(k)
    for r in regex.findall(message.lower()):
        results.append(r)

['beer', 'beer', 'beer', 'german beer', 'german']

它像我想要的那样工作,但我认为这不是最好的方法。有人可以帮助我吗?

最佳答案

re.findall 找不到重叠的匹配项。如果要使用正则表达式,则必须创建单独的表达式并像第二个示例一样在循环中运行它们。

请注意,您的第二个示例也可以缩短为以下内容,尽管您是否觉得这更具可读性是一个品味问题:

results = [r for k in keywords for r in re.findall(k, message.lower())]

您的具体示例不需要使用正则表达式。如果您只想查找固定字符串,则应避免使用正则表达式。

10-08 02:18