2012-08-16 62 views
0

這裏是我的情況:Python的正則表達式:逃避反向引用

re.sub(r'([^\\])', r'\1[\W\1]*', string) 

它是直線前進,我要追加[\(本身)W]後(本身)本身是一組字符(可以是特殊的)。這就是爲什麼我需要把它放在一個集合中去除所有特殊的含義。但是,我的小組可以是一個SET。我知道嵌套集不起作用。我如何逃避/刪除方括號以安全地將我的小組放入集合中?

我的另一個嘗試是使用\ 1(\ W | \ 1)*代替,但我需要轉義組中的字符,而不用轉義組中的方括號。我該怎麼做?

這是一個兩難的問題。我不知道如何解決這個問題以及走哪條路。請幫忙。

非常感謝。編輯: 我跳過了一步。在匹配字符但\([^ \]部分)並替換爲解釋的表達式後,我有時需要用一組相似的字符替換它。所以'a'變成'[a @]',''變成'[s5 $]'等等...... 這個問題真的是錯誤的。但是我解決了這個問題,所以如果你仍然想從我之前寫的東西中弄懂一些東西,請不要:)

+3

您能否提供一些示例字符串以瞭解需要更換什麼以及如何更換? – Kash 2012-08-16 19:25:16

+0

我不明白你想要做什麼。假設'string ='a'',你的代碼會返回''a [\\ Wa] *''。 – MRAB 2012-08-16 19:41:13

+0

聽起來像你想使用正則表達式來改變輸入正則表達式到另一個正則表達式;那是對的嗎? 另外,是否有任何限制,定義捕獲的組?你現在捕獲任何不是反斜槓的字符。你想捕捉一個字符嗎?或者你想用' [\ W ] *「替換'string'中的每個字符(不是反斜槓)嗎? – Evert 2012-08-16 19:52:29

回答

1

你可以使用一個函數作爲re.sub的替換。這將允許你來進行替換之前調用你的比賽re.escape

def escape_repl(match): 
    return '{0}[\W{0}]*'.format(re.escape(match.group(1))) 

re.sub(r'([^\\])', escape_repl, string) 

例子:

>>> print re.sub(r'([^\\])', escape_repl, '[^$]') 
\[[\W\[]*\^[\W\^]*\$[\W\$]*\][\W\]]* 

我想這是你正在嘗試做的,但它是從你有點不清楚題。請提供一些示例字符串和預期結果,如果這不符合您的要求。

+0

謝謝。是的,這很不清楚。但我想我以不同的方式解決了我。不管怎樣,謝謝你。 – 2012-08-16 20:26:34