我有一个'x = 1'
字符串,我希望能够用'='
替换单个'=='
字符的所有出现。但是如果给出字符串'x == 1'
,我想保持原样。字符串也不能完美格式化,'x =1' '1=x' and 'x= 1'
都是有效的输入。
我无法使用string.replace('=', '==')
,因为它会将'x == 1'
字符串转换为'x ==== 1'
我尝试使用正则表达式并向前看re.sub(r'=(?!=)', '==', string)
但是对于字符串'x == 1'
,这会产生'x === 1'
,因为前瞻不会消耗第二个=所以正则表达式继续查找并在忽略第一个=。
有谁知道解决这个问题的好方法?
答案 0 :(得分:5)
只有负面预测,第二个=
将满足正则表达式,并将替换为==
。
你必须同时使用前瞻和后视:
re.sub(r'(?<!=)=(?!=)', '==', string)
答案 1 :(得分:3)
尝试以下方法:
re.sub(r'(?<!=)=(?!=)', '==', string)
答案 2 :(得分:1)
非正则表达式:
s.replace('==', '=').replace('=', '==')
答案 3 :(得分:0)
怎么样:
string.replace('=', '==')
其次是:
string.replace('====', '==')
答案 4 :(得分:0)
假设您的输入“很好”并且都是foo[space]=[space]bar
,并且=
周围有空格,那么请将这些空格放入您的字符串替换中:
string.replace(' = ', ' == ');
^-^-- ^--^-- spaces
如果你有变量输入,例如foo= bar
或foo =bar
,那么您将需要正则表达式版本或许多额外的子字符串操作来检查前/后字符。
答案 5 :(得分:0)
我可能会用
string.replace('=', '==')
string.replace('====', '==')
我觉得更具可读性。我不知道它在性能方面的表现如何。
答案 6 :(得分:0)