用字符串中的'=='替换'='

时间:2013-10-18 15:29:14

标签: python regex string

我有一个'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',因为前瞻不会消耗第二个=所以正则表达式继续查找并在忽略第一个=。

后替换它

有谁知道解决这个问题的好方法?

7 个答案:

答案 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= barfoo =bar,那么您将需要正则表达式版本或许多额外的子字符串操作来检查前/后字符。

答案 5 :(得分:0)

我可能会用

string.replace('=', '==')
string.replace('====', '==')

我觉得更具可读性。我不知道它在性能方面的表现如何。

答案 6 :(得分:0)

使用此:

re.sub(r'(?<=(?:\b|\s))=(?=(?:\b|\s))', '==', string)

\b匹配字边界,因此当存在相邻的=时,它将不匹配。

Rubular