簡體   English   中英

帶變量的 Python 正則表達式 findall

[英]Python Regular Expression findall with variable

我正在嘗試將 re.findall 與后視和期待一起使用來提取數據。 當我不使用 raw_input 變量時,正則表達式工作正常,但我需要用戶能夠輸入各種不同的搜索詞。

這是當前的代碼:

me = re.findall(r"(?<='(.+)'+variable+'(.+)')(.*?)(?='(.+)+variable+(.+)')", raw)

如您所見,我試圖在一個搜索詞之間提取字符串。

但是,每次使用這種類型的格式時,都會出現固定寬度錯誤。 有沒有辦法解決?

我也嘗試了以下格式但沒有成功。

variable = raw_input('Term? ')
'.*' + variable + '.*'

'.*%s.*' % (variable, )

'.*{0}.*'.format(variable)

 '.*{variable}.*'.format(variable=variable)

Lookbehind 通常的實現方式(包括它的 Python 實現)有一個你不幸遇到的固有限制:lookbehinds 不能是可變長度的。 此處的“關於 Lookbehind 的重要說明”部分解釋了原因。 不過,我認為您應該能夠在沒有后視的情況下執行正則表達式。

我不確定這是否是你的意思,但它可能會讓你開始。 據我了解您的問題,您不需要前瞻或后視。 這適用於 Python 2.x(不適用於 Python 3):

>>> import re
>>> string_to_search = 'fish, hook, swallowed, reeled, boat, fish'
>>> entered_by_user = 'fish'
>>> search_regex = r"{0}(.+){0}".format(entered_by_user)
>>> match = re.search(search_regex, string_to_search)
>>> if match:
...     print "result:", match.group(1).strip(' ,')
...
result: hook, swallowed, reeled, boat

如果您真的想要上面評論中的最后一個“魚”,那么只需從format()字符串中刪除第二個{0}

此解決方案應該有效:

me = re.findall(rf"(?<='(.+)'+{variable}+'(.+)')(.*?)(?='(.+)+{variable}+(.+)')", raw)

您還可以根據需要添加許多不同的變量。 為正則表達式和 {} 之間的所需變量添加rf

import re

text = "regex is the best"    
var1 = "is the"
var2 = "best"
yes = re.findall(rf"regex {var1} {var2}", text)

print(yes)

['正則表達式是最好的']

暫無
暫無

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

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