Python正则表达式:更改条件运算符
在Python中,我想用正则表达式把所有小于号(<)和小于等于号(<=)替换成相应的大于号(>)或大于等于号。比如说,"a < b"应该被替换成"b > a"。我觉得我的正则表达式代码是对的(见下面),但我不知道怎么进行替换的部分。因为正则表达式是分组的,所以我需要用反向引用来访问我想要交换的表达式部分。
c = re.compile(r"\b(\w+)\s*"
r"((<)|(>)|(<=)|(>=))"
r"\s*(\w+)\b")
subStr = r"\7 #WHAT GOES HERE \1"
我可以用\7来获取条件运算符右边的“单词”,用\1来获取左边的那个。那么,我该怎么翻转运算符呢?
实际上,我使用的替换格式是这样的:
print(c.sub(subStr, "a < b"))
另外,我知道在这里不一定要用正则表达式,但我想试着用它来实现。
1 个回答
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