Python正则表达式替换捕获

时间:2018-11-22 01:38:25

标签: python regex

我正在尝试使用+-(仅)使用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>

2 个答案:

答案 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