[英]Python regex fuzzy searching
我有一個關於使用模糊正則表達式和 python regex
模塊制作模式的問題。
我有幾個字符串,例如 TCATGCACGTGGGGCTGAC
該字符串的前八個字符是可變的(多個選項):TCAGTGTG、TCATGCAC、TGGTGGCT。 另外,在變量部分之后還有一個常量部分:GTGGGGCTGAC。
我想設計一個正則表達式,它可以在更長的字符串中檢測到這個字符串,同時最多允許 2 次替換。
例如,這是可以接受的,因為兩個字符已被替換:
TCATGCACGTGGGGCTGAC
TC C TGCACGTGG A GCTGAC
但是,不應接受更多的替換。
在我的代碼中,我嘗試執行以下操作:
import regex
variable_parts = ["TCAGTGTG", "TCATGCAC", "TGGTGGCT", "GATAAGTG", "ATTAGACG", "CACTTCCG", "GTCTGTAT", "TGTCAAAG"]
string_to_test = "TCATGCACGTGGGGCTGAC"
motif = "(%s)GTGGGGCTGAC" % "|".join(variable_parts)
pattern = regex.compile(r''+motif+'{s<=2}')
print(pattern.search(string_to_test))
當我運行此代碼並更改string_to_test
的最后一個字符時,我得到了匹配。 但是當我在string_to_test
中間手動添加替換時,我沒有得到任何匹配(即使我想允許最多 2 個替換)。
現在我知道我的正則表達式可能完全是廢話,但我想知道我到底需要做什么才能完成這項工作,以及我需要在代碼中的什么位置添加/刪除/更改內容。 歡迎任何建議/提示!
現在,您只需在看起來像(TCAGTGTG|TCATGCAC|TGGTGGCT|GATAAGTG|ATTAGACG|CACTTCCG|GTCTGTAT|TGTCAAAG)GTGGGGCTGAC{s<=2}
的模式中將限制添加到最后一個C
。
要將{s<=2}
量詞應用於整個表達式,您需要將模式包含在非捕獲組中:
pattern = regex.compile(fr'(?:{motif}){{s<=2}}')
上面的示例展示了如何在 f 字符串文字的幫助下聲明您的模式,其中文字大括號使用{{
和}}
(雙)大括號定義。 它產生與pattern = regex.compile('(?:'+motif+'){s<=2}')
相同的結果。
另外,請注意r''+
是多余的,對最終模式沒有影響。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.