输入:
"bla&&bla...bla &&bla...bla&& bla...bla && bla"
输出:
"bla && bla...bla && bla...bla && bla...bla && bla"
目前我正在这样做:
str = "if((a&&b)||c)";
wrong = "&&";
right = " && ";
startFrom = 0
wi = 0
while wi != -1
wi = str.find(wrong, startFrom)
ri = str.find(right, startFrom) + 1
startFrom = wi + 1
if wi != ri
pre = wi - 1
post = wi + len(wrong)
if str[pre] != " "
str = str[:pre] + " " + str[pre:]
if str[post] != " "
str = str[:post] + " " + str[post:]
是否有一种清晰可读的方式来做同样的事情?
请您参考如下方法:
看来你想要这样的东西,
>>> s = "if((a&&b)||c) && b"
>>> re.sub(r'(?<!\s)(&&)(?!\s)', r' \1 ', s)
'if((a && b)||c) && b'
上面的正则表达式将捕获 &&只有前后没有空格的字符串。
更新:
>>> re.sub(r'\s*&&\s*', r' && ', 'bla&&bla...bla &&bla...bla&& bla...bla && bla')
'bla && bla...bla && bla...bla && bla...bla && bla'
或
>>> re.sub(r'\s+&&(?!\s)|(?<!\s)&&\s+|(?<!\s)&&(?!\s)', r' && ', "bla&&bla...bla &&bla...bla&& bla...bla && bla")
'bla && bla...bla && bla...bla && bla...bla && bla'
(?<!\s)断言匹配项前面不会有空格字符的负后视。(?!\s)否定前瞻,断言匹配后不会跟空格字符。
