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

中的python regex条件回复sub-怎么做?

  •  0
  • keithpjolley  · 技术社区  · 6 年前

    re.sub() ? 我试过很多不同的方法,但运气不好。这是我有的。

    import re
    # match anything: <test> always true
    a = re.compile('(?P<test>.*)')  
    
    # return _'yes'_ or 'no' based on <test>
    a.sub('(?(\g<test>)yes|no)', 'word')
    '(?(word)yes|no)'
    

    我期望的是“是”或“不是”,而不是实际的测试。

    我从中得到的是 <test>

    我试过了 re.sub(pat, rep, str) 同样的结果。

    1 回复  |  直到 6 年前
        1
  •  4
  •   Valdi_Bo    6 年前

    如果要执行条件替换,请使用 功能 作为 参数。

    此函数接受 比赛 参数(已捕获的内容) 其结果是替换匹配的文本。

    在replace函数中引用名为 测试 使用 group('test') .

    示例程序:

    import re
    
    def replTxt(match):
        return 'yes' if match.group('test') else 'no'
    
    a = re.compile('(?P<test>.+)')  
    result = a.sub(replTxt, 'word')
    print(result)
    

    但我有这样一句话:

    no 将永远被这个程序取代。 如果正则表达式不匹配, replTxt 函数将不会被调用。

    测试 已匹配:

    • 这个捕获组应该是 有条件的 ? 之后),
    • 为了不匹配空文本,正则表达式应该包含 一些更匹配的东西,例如。 (?P<test>[a-z]+)?\d .