我正在尝试使用+-
(仅)使用re.sub
之前和之后添加一个空格?
import re
text = """a+b
a+b-c
a + b - c
a+b-c+d-e
a + b - c + d - e"""
text = re.sub('(\s?[+-]\s?)', r' \1 ', text)
print(text)
预期结果:
a + b
a + b - c
a + b - c
a + b - c + d - e
a + b - c + d - e
<script type="text/javascript" src="//cdn.datacamp.com/dcl-react.js.gz"></script>
<div data-datacamp-exercise data-lang="python">
<code data-type="sample-code">
import re
text = """a+b
a+b-c
a + b - c
a+b-c+d-e
a + b - c + d - e
"""
text = re.sub('(\s?[+-]\s?)', r' \1 ', text)
print(text)
</code>
</div>
答案 0 :(得分:4)
尝试仅捕获[+-]
,然后替换为用空格包围的组:
text = re.sub('\s?([+-])\s?', r' \1 ', text)
<script type="text/javascript" src="//cdn.datacamp.com/dcl-react.js.gz"></script>
<div data-datacamp-exercise data-lang="python">
<code data-type="sample-code">
import re
text = """a+b
a+b-c
a + b - c
a+b-c+d-e
a + b - c + d - e
"""
text = re.sub('\s?([+-])\s?', r' \1 ', text)
print(text)
</code>
</div>
您还可以考虑使用\s
而不是*
来重复?
,例如,3 + 5
被美化为3 + 5
:< / p>
\s*([+-])\s*
答案 1 :(得分:2)
您可以将lambda
函数与re.sub
一起使用:
import re
new_text = re.sub('(?<=\S)[\+\-](?=\S)', lambda x:f' {x.group()} ', text)
输出:
a + b
a + b - c
a + b - c
a + b - c + d - e
a + b - c + d - e