如何使用python中的re.sub()在字符串中替换两个不同的子字符串



这里的任务是替换'&&','||'分别使用"one_answers"或"。我只能一次更改一个逻辑操作员。我尝试在时间应用re.sub()方法,这导致了仅包含"或"的输出。

样本输入:

11
a = 1;
b = input();
if a + b > 0 && a - b < 0:
    start()
elif a*b > 10 || a/b < 1:
    stop()
print set(list(a)) | set(list(b)) 

样本输出:

a = 1;
b = input();
if a + b > 0 and a - b < 0:  # '&&' changed to ' and '
    start()
elif a*b > 10 or a/b < 1:    # '||' changed to ' or '
    stop()
print set(list(a)) | set(list(b))

我的代码:

import re
N = int(raw_input())
print N
lines = ""
for i in range(0,N):
    lines+=raw_input()+"n"
lines = re.sub(r"s&&s", ' and ' , lines, flags=re.IGNORECASE)
print lines

我的输出:

11                             #Actually this should be eliminated
a = 1;
b = input();
if a + b > 0 and a - b < 0:    # '&&' changed to ' and '
    start()
elif a*b > 10 || a/b < 1:
    stop()
print set(list(a)) | set(list(b))

re.sub

中使用lambda功能
>>> import re
>>> s = 'foo && bar || buzz'
>>> re.sub(r's(&&|||)s', lambda m: ' and ' if m.group(1) == '&&' else ' or ', s)
'foo and bar or buzz'
>>> 

REGEX => s(&&|||)s

  • s匹配空间字符
  • (&&|||)匹配并捕获&&||字符。

函数=> lambda m: ' and ' if m.group(1) == '&&' else ' or '

  • 所有匹配的字符均以m匹配对象传递给匿名函数。我们可以通过在Match Object上调用group(index)来获得所有匹配的字符。即m.group()m.group(0)将显示所有字符,m.group(1)将显示由第一个捕获组捕获的字符。

  • 现在,它检查捕获的字符等于&&,如果是的话,它将用and代替该特定的字符,否则它将返回or并因此被替换。

虽然您可以使用正则表达式,但真实的简单列表理解加上' '.join()也可以工作:

>>> string = 'foo && bar || buzz'
>>> ' '.join(['and' if w == '&&' else 'or' if w == '||' else w for w in string.split()])
'foo and bar or buzz'
>>> 

最新更新