这里的任务是替换'&&','||'分别使用"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
>>> 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'
>>>