正则expression式语法为“无匹配”?

我有一个Python模板引擎,大量使用正则expression式。 它使用如下的连接:

re.compile( regexp1 + "|" + regexp2 + "*|" + regexp3 + "+" ) 

我可以修改个别的子string(regexp1,regexp2等)。

有什么没有匹配的小而轻的expression式,我可以在一个模板里面使用,我不想要任何匹配? 不幸的是,有时'+'或'*'被附加到正则expression式primefaces,所以我不能使用空string – 一个“没有重复”的错误会上升。

这不应该匹配任何东西:

 re.compile('$^') 

所以如果你用'$ ^'来replaceregexp1,regexp2和regexp3,将不可能find一个匹配。 除非你使用多线模式。


经过一些testing,我发现了一个更好的解

 re.compile('a^') 

这是不可能匹配,并会比以前的解决scheme更早失败。 你可以用任何其他angular色来replace,而且总是不可能匹配

(?!)应该总是无法匹配。 这是零宽度的负面预测。 如果括号中的内容匹配,则整个匹配失败。 鉴于它没有任何内容,它将无法匹配任何东西(包括任何东西)。

要匹配一个空string – 即使在多行模式下 – 您可以使用\A\Z ,所以:

 re.compile('\A\Z|\A\Z*|\A\Z+') 

不同的是\A\Zstring的开始和结束,而^$这些可以匹配行的开始/结束,所以$^|$^*|$^+可能会匹配包含换行符的string标志被启用)。

如果不能匹配任何内容(甚至是空string),只需在string开头之前尝试查找内容,例如:

 re.compile('.\A|.\A*|.\A+') 

由于没有字符可以在\ A(根据定义)之前出现,所以总是无法匹配。

也许'.{0}'

 "()" 

什么都不匹配

你可以使用
\z..
这是string的绝对结束,其次是两个任何东西

如果加上+* ,那么这个方法仍然可以拒绝任何匹配

或者,使用一些列表理解去除无用的正则expression式条目并join到一起。 就像是:

 re.compile('|'.join([x for x in [regexp1, regexp2, ...] if x != None])) 

请确保在该行代码旁边添加一些注释,尽pipe:-)