[英]Python Regex Matching Two Strings If another String not Between
我只想在*
不包含XX
搜索AA*ZZ
。
對於 2 個字符串:
"IY**AA**BMDHRPONWUY**ZZ**"
"BV**AA**BDMYB**XX**W**ZZ**CKU"
如何僅將正則表達式與第一個匹配?
發布我對問題的原始評論作為答案
除了已經發布的“單一正則表達式”解決方案之外,請考慮以下解決方案:
AA
和ZZ
之間任何文本的所有匹配項,例如使用此正則表達式: AA(.+)ZZ
。 將所有匹配項存儲在列表中。XX
的那些。 您甚至不需要為此使用 Regex,因為包括 Python 在內的大多數語言都有專用的字符串方法。你得到的回報是一個干凈的解決方案,沒有任何復雜的正則表達式。 它易於閱讀,易於維護,如果要添加任何新條件,它們可以應用於最終結果。
用一些代碼來支持它(你可以在這里測試):
import re
test_str = """
IYAABMDHRPONWUYZZ
BVAABDMYBXXWZZCKU
"""
# First step: find all strings between AA and ZZ
match_results = re.findall("AA(.+)ZZ", test_str, re.I)
# Second step: filter out the ones that contain XX
final_results = [match for match in match_results if not ("XX" in match)]
print(final_results)
至於分配給final_results
的部分,它被稱為列表理解。 由於這不是問題的一部分,我不會在這里解釋。
我的猜測是,您可能(但不確定)想要設計一個類似於以下內容的表達式:
^(?!.*(?=AA.*XX.*ZZ).*).*AA.*ZZ.*$
import re
regex = r"^(?!.*(?=AA.*XX.*ZZ).*).*AA.*ZZ.*$"
test_str = """
IYAABMDHRPONWUYZZ
BVAABDMYBXXWZZCKU
AABMDHRPONWUYXxXxXxZZ
"""
print(re.findall(regex, test_str, re.M))
['IYAABMDHRPONWUYZZ', 'AABMDHRPONWUYXxXxXxZZ']
該表達式在regex101.com 的右上角面板中進行了解釋,如果您希望探索/簡化/修改它,並且在此鏈接中,您可以觀看它如何與某些示例輸入匹配,如果您願意的話。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.