簡體   English   中英

在Python中使用正則表達式搜索字符串

[英]Search strings using regular expression in Python

當我嘗試使用正則表達式在其他字符串中查找字符串時,它不能按預期工作。 這是一個例子:

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())] 

您的具體示例不需要使用正則表達式。 如果您只想查找固定字符串,則應避免使用正則表達式。

re.findallhttp://docs.python.org/2/library/re.html中描述

“返回字符串中所有非重疊的模式匹配...”

不重疊意味着對於“德國啤酒”它不會找到“德國啤酒”和“德國啤酒”,因為這些匹配是重疊的。

我的清潔器(對我而言)是你最后的解決方案

results = []
for key in keywords:
    results.extend(re.findall(key, message, re.IGNORECASE))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM