我正在嘗試比較兩個串列之間的元素。一個串列是預定義的,它是一種必須與新串列進行比較的模式。應該在串列之間相同索引的元素之間進行比較。示例:list1[0] 必須僅與 list2[0] 進行比較,list1[1] 必須僅與 list2[1] 進行比較等。如果所有元素都匹配,則輸出應僅回傳 True。我面臨的問題是,預定義模式中的一個元素有一部分是動態的,比較時我必須忽略。我怎樣才能做到這一點
pattern = ['Hi', 'my' , 'name is <xxxxxxxxxxx> age <yy>']
This is defined pattern. Here the contents inside <> is dynamic and has to be ignored.
when comparing list2 = ['Hi', 'my' , 'name is soku age 21'] should be true.
list3 = ['Hi', 'my', 'soku'] should be false
我怎樣才能做到這一點,因為普通元素到元素字串比較不起作用。
另一個例子
pattern = ['A', 'B', 'C_<xxxx>_AB']
list1 = ['A', 'B', 'C_aaaa112=22_AB']
This should be true
uj5u.com熱心網友回復:
一種方法是使用all和re.fullmatch:
import re
pattern = ['Hi', 'my', 'name is . age \d{2}']
list2 = ['Hi', 'my', 'name is soku age 21']
list3 = ['Hi', 'my', 'soku']
print(all(re.fullmatch(p, l) for p, l in zip(pattern, list2)))
print(all(re.fullmatch(p, l) for p, l in zip(pattern, list3)))
輸出
True
False
作為替代方案,您可以使用以下模式:
pattern = ['Hi', 'my', 'name is \S age \d{2}']
以避免匹配空格字符。
圖案:
.
匹配任何字符,包括空格,而
\S
匹配任何不是空白字符的字符。此外模式:
\d{2}
將匹配兩個連續的數字。
要從用戶輸入動態構建模式,您可以執行以下操作:
pattern = ['Hi', 'my', 'name is <xxxxxxxxxxx> age <yy>']
regex_pattern = [re.sub(r"<. ?>", r". ", s) for s in pattern]
print(all(re.fullmatch(p, l) for p, l in zip(regex_pattern, list2)))
print(all(re.fullmatch(p, l) for p, l in zip(regex_pattern, list3)))
輸出
True
False
uj5u.com熱心網友回復:
如果你想在沒有庫的純 python 中做到這一點,你可以添加一個存盤年份和變數的變數,然后你可以使用替換來替換串列最后一個字串中的名稱和年份。您現在應該有多個字串串列,其中變數元素已替換為您想要的字符,因此我們可以假設變數被認為是相等的。然后我們正常檢查它們是否是同一個字串
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/372051.html
上一篇:如何裁剪大括號之間的文本
