在我的代码中,我从子表达式列表生成一个正则表达式。如果将每个子表达式放入非匹配组(?:...)
中,则连接表达式的工作正常:
# concatenation:
joined_expr = ''.join('(?:{})'.format(expr) for expr in subexpression)
# disjunction:
joined_expr = '|'.join('(?:{})'.format(expr) for expr in subexpression)
问题是:这个连接表达式的结果是更大表达式的子表达式,而
子表达式
可能为空,但连接表达式不能匹配空字符串。那么最简单的方法是什么来制作一个无法匹配的正则表达式呢?
(?:(?!.).)
可以吗?如果不行,为什么不行?Python的re
引擎是否能理解我试图创建失败分支并优化它的尝试?
joined_expr
将用于连接表达式,这是析取的一个分支。该分支必须不匹配(即必须失败)。我在这里使用了“匹配”一词表示“不失败”。 - Kijewskimatch = regex.match(string); if match & bool(string): do_code
呢?这比通过re检查组合条件的空字符串要简单得多,而且可能更快。 - Alex Huszagh