re.sub 中的 python 正则表达式条件 - 如何?

kei*_*ley 1 python regex conditional-statements

是否可以使用 python 的正则表达式条件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)'
Run Code Online (Sandbox Code Playgroud)

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

我从中得到的是可以<test>看到但正则表达式条件没有被执行。还有另一种方法可以实现此目的吗?

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

Val*_*_Bo 7

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

该函数接受一个匹配参数(已捕获的参数),其结果是要替换匹配项的文本。

要在替换函数中引用名为test的捕获组,请使用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)
Run Code Online (Sandbox Code Playgroud)

但我有这样一句话:

该计划不可能no取代它。如果正则表达式不匹配,replTxt函数将不会被调用。

测试组有可能什么都不匹配,但有些东西已经匹配:

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