2014-06-06 65 views
1
re.sub("([^\\[\s\\]]+)([\\]\s]*)([>|=|<])",replace(r'\1')+r'\2'+r'\3',s) 

這不會通過第一組替換函數,而是將r'\1'作爲字符串傳遞。使用re.sub與組

請提出發生了什麼問題。

+0

在'[\\] \ s] *'部分你沒有打開支架 – furins

+0

其逃脫 – anuj

+0

不知道,但它應該是'([\] \ s] *)'爲了逃脫 – furins

回答

5

您正在向方法replace傳遞一個字符串。

該組只會在sub方法中評估。你可以做一個獨立的search,讓您的結果,未經檢驗的,雖然因爲你還沒有公佈從s時間值,也replace功能:

pattern = "([^\\[\s\\]]+)([\\]\s]*)([>|=|<])" 
re.sub(pattern, replace(re.search(pattern, s).group(1))+r'\2'+r'\3',s) 

這裏是另一個方法可能更適合你:

# this method is called for every match 
def replace(match): 
    group1 = match.group(1) 
    group2 = match.group(2) 
    group3 = match.group(3) 
    # process groups 
    return "<your replacement>" 

s = "<your string>" 
pattern = "([^\\[\s\\]]+)([\\]\s]*)([>|=|<])" 
newtext= re.sub(pattern, replace, s) 

print(newtext) 
+0

謝謝!我如何擴展這個工作來替換匹配的多個實例? – anuj

+0

@anuj我編輯了我的答案,以包括可能更適合您的需求的可能性。 – user432

+0

非常感謝! – anuj