給定一個像r'a(\ w +)regex這樣的正則表達式,我知道我可以捕獲這個組,但是如果給出了一個捕獲的組,我想將它歸爲正則表達式。我在下面列出了一個我已經構建的功能,但是因爲我不是正則表達式的專家,所以我想知道是否有更標準的此類行爲實現,或者「最佳實踐」是什麼。將捕獲的組分回到Python正則表達式的最佳方式是什麼?
def reverse_capture(regex_string, args, kwargs):
regex_string = str(regex_string)
if not args and not kwargs :
raise ValueError("at least one of args or kwargs must be empty in reverse_capture")
if kwargs :
for kwarg in kwargs :
regex_string = re.sub(r'(?:[^\\[]|[^\\](?:\\\\)+|[^\\](?:\\\\)*\\\[)\(\?P<.+>.+(?:[^\\[]|[^\\](?:\\\\)+|[^\\](?:\\\\)*\\\[)\)',
kwarg,
regex_string)
elif args :
for arg in args :
regex_string = re.sub(r'(?:[^\\[]|[^\\](?:\\\\)+|[^\\](?:\\\\)*\\\[)\(.+(?:[^\\[]|[^\\](?:\\\\)+|[^\\](?:\\\\)*\\\[)\)',
arg,
regex_string)
else :
return regex_string
注:以上功能實際上並沒有工作,但因爲我想通之前,我嘗試覆蓋每一個情況下,我應該問在這個網站。
編輯:
我想我要澄清我的意思了一下。我的目標是編寫Python功能使得在給定像R「AB(+)。C」等,「一些字符串」自變量的正則表達式,我們可以有以下幾種:
>>> def reverse_capture(r"ab(.+)c", "Some strinG")
"abSome strinGc"
那就是說,這個論點將被代入捕獲組的正則表達式。確實有更好的方法來格式化字符串。然而,正則表達式在我的用例中給出,所以這不是一個選項。
對於任何人誰好奇,我想要做的是創建一個Django包,將使用模板標籤來查找與某些視圖函數或命名的url關聯的正則表達式,可選地輸入一些參數,然後檢查如果從模板訪問的網址與標籤生成的網址匹配。這將解決一些導航問題。有一個更簡單的軟件包可以做類似的事情,但它不適合我的用例。
例子:
如果reverse_capture是我想寫的功能,然後在這裏輸入/輸出(I傳中,正則表達式用原始字符串)的一些例子,以及函數調用:
reverse_capture:正則表達式串 - >正則表達式 輸入:一個正則表達式和一個字符串 輸出:通過替換正則表達式,其參數,字符串的第一個捕獲組中獲得的正則表達式。
例子:
>>> reverse_capture(r'(.+)', 'TEST')
'TEST'
>>> reverse_capture(r'a longer (.+) regex', 'TEST')
'a longer TEST regex'
>>> reverse_capture(r'regex with two (.+) capture groups(.+)', 'TEST')
'regex with two TEST capture groups(.+)'
也許有一個更好的方法來做到這一點,但在確保整個表達式不在括號內,您發現的括號被轉義,它們的轉義字符本身沒有被轉義之間,等等......您可以想象這會變得有點混亂! – Nick
做一個小例子,做你想做的一部分。當你的意圖不清楚時,要求人們看看這個瘋狂的逃跑可能會被忽略。 – msw
與其試圖解析正則表達式以找出捕獲組的位置,爲什麼不使用字符串格式將文本放置在捕獲組需要去的地方? – user2357112