在我的代码中,我从子表达式列表中生成正则表达式。加入表情,如果我把他们每个人在非匹配组(?:…)
正常工作:无法匹配的正则表达式(对于生成的表达式)
# concatenation:
joined_expr = ''.join('(?:{})'.format(expr) for expr in subexpression)
# disjunction:
joined_expr = '|'.join('(?:{})'.format(expr) for expr in subexpression)
问题是:这样做的结果是加盟的表达是一个更大的表达式一个子表达式,并subexpression
可能是空的,但连接的表达式不能与空字符串匹配。
那么为什么要让成为一个正则表达式,这与不符? (?:(?!.).)
会工作吗?如果不是,为什么不呢? Python的re
引擎是否理解我尝试创建失败的分支并对其进行优化?
有,如果它被标记为一个非捕获组是问题,如果一个空字符串相匹配? –
'joined_expr'将用于连接的表达式,这是一个析取的分支。该分支不能匹配(即必须失败)。我在这里使用“匹配”一词作为“不会失败”。 – kay
如果您正在寻找不对结果字符串进行操作(如果它为空),为什么不直接跳过re并执行match = regex.match(string);如果匹配和布尔(字符串):do_code' 它的方式更简单,可能比通过组合条件检查空字符串更快。 –