代码之家  ›  专栏  ›  技术社区  ›  ewwink

python regex替换捕获

  •  3
  • ewwink  · 技术社区  · 7 年前

    我正在尝试前后添加一个空格 +- ,使用 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 回复  |  直到 7 年前
        1
  •  4
  •   CertainPerformance    7 年前

    尝试捕捉 只有 这个 [+-] ,然后替换为由空格包围的组:

    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 S与 * 而不是 ? 例如, 3 + 5 被美化成 3 + 5 :

    \s*([+-])\s*
    
        2
  •  2
  •   Ajax1234    7 年前

    你可以使用 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