0

我有一个字符串,例如'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'

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

4

7 回答 7

5

只有负前瞻,第二个=将满足正则表达式,并将被替换为==.

您必须同时使用前瞻和后视:

re.sub(r'(?<!=)=(?!=)', '==', string)
于 2013-10-18T15:30:08.147 回答
3

尝试以下操作:

 re.sub(r'(?<!=)=(?!=)', '==', string)
于 2013-10-18T15:30:42.887 回答
1

非正则表达式:

s.replace('==', '=').replace('=', '==')
于 2013-10-18T15:54:36.993 回答
0

关于什么:

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

其次是:

string.replace('====', '==')
于 2013-10-18T15:31:24.803 回答
0

假设您的输入“很好”完成并且都是foo[space]=[space]bar,周围有空格=,然后将这些空格放入您的字符串替换中:

string.replace(' = ', ' == ');
                ^-^--  ^--^-- spaces

如果您确实有可变输入,例如foo= baror foo =bar,那么您将需要正则表达式版本,或大量额外的子字符串操作来检查前面/后面的字符。

于 2013-10-18T15:31:34.417 回答
0

我可能会使用

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

我发现它更具可读性。我不知道它如何比较性能。

于 2013-10-18T15:31:51.423 回答
0

用这个:

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

\b匹配单词边界,因此当有相邻的=.

红色的

于 2013-10-18T15:34:54.600 回答