2014-04-16 59 views
2

在Python中,我嘗試使用一個正則表達式來替換全部小於(<)且小於等於(< =)的表達式,其中等於大於(>)或大於等於或等於。例如,「a < b」將被替換爲「b> a」。我相信我的正則表達式的代碼是正確的(如下所示),但我不知道如何執行代碼的替換部分。由於正則表達式是分組的,我必須使用反向引用才能訪問我想要切換的表達式的部分。Python正則表達式:改變條件運算符

c = re.compile(r"\b(\w+)\s*" 
      r"((<)|(>)|(<=)|(>=))" 
      r"\s*(\w+)\b") 
subStr = r"\7 #WHAT GOES HERE \1" 

我可以使用\ 7來獲取條件運算符右側的「word」和\ 1以獲得左側的一個。我如何翻轉操作符號?

實際使用替代,我使用這種格式的東西:

print(c.sub(subStr, "a < b")) 

另外,我知道我沒有在這裏使用正則表達式,但我試圖使它與一個合作。

+0

Didnt'str.replace'幫助你嗎? – thefourtheye

+0

你應該匹配'(<|>)(=?)'並替換爲'> \ 1'。 –

+0

關於匹配的好主意。但用> \ 1替換什麼? – user3538355

回答

1

您可以使用函數re.sub做這樣的事情:

import re 

txt='''\ 
a<b 
a<=b''' 

di={'<':'>', '<=':'>='}      # expand as needed 
print re.sub(r'\b(\w+\s*)(<|<=)(\s*\w+)',  # use your regex if wanted 
      lambda m: m.group(3)+di[m.group(2)]+m.group(1), txt) 

打印:

b>a 
b>=a