簡體   English   中英

Python 正則表達式模糊搜索

[英]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.

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