2016-06-12 58 views
1

我想提供替代替換模式re.sub。python re.sub - 替代替換模式

比方說,我有兩個搜索模式的替代品,像這樣:

re.sub(r"[A-Z]+|[a-z]+", replacementpattern, string) 

和,而不是提供一個替換模式,我想以某種方式趕上它的搜索模式可選項被匹配並提供可供選擇的替代模式。 這可能嗎? 謝謝。

PS。這裏的代碼細節無關緊要,這是一個普遍的問題。

+0

是的。閱讀正則表達式文檔。你正在尋找捕獲括號。 – spectras

+1

我知道搜索模式中的分組選項,然後在替換模式中使用\數字引用。我想要做的是:如果group \ 1匹配,則將字符串替換爲'a',如果group \ 2則替換爲'b'。 – user2965473

回答

1

您可以將函數傳遞給re.sub()。在函數中,您可以根據捕獲的組返回所需的值。爲了說明的簡單代碼:

>>> def fun(m): 
... if m: 
...  if m.group(1): 
...  return 'x' 
...  else: 
...  return 'y' 


>>>print re.sub(r"([A-Z]+)|([a-z]+)", fun , "ab") 

功能如果fun()檢查匹配成功,並且基於所捕獲的組,返回替換字符串。如果[A-Z]+匹配,則x是替換字符串,否則[a-z]+匹配,y是替換字符串。

欲瞭解更多信息:doc

+0

這是完美的,謝謝! – user2965473

0

通常情況下,你只使用兩個替代:

re.sub(r"[A-Z]+", replacement1, string) 
re.sub(r"[a-z]+", replacement2, string) 

虎頭蛇尾的,對不對?

它實際上比其他代碼更少的代碼,它更清楚你正在做什麼。