"无匹配"的正则表达式语法?

gri*_*yvp 70 python regex

我有一个大量使用regexp的python模板引擎.它使用如下的连接:

re.compile( regexp1 + "|" + regexp2 + "*|" + regexp3 + "+" )
Run Code Online (Sandbox Code Playgroud)

我可以修改单个子串(regexp1,regexp2等).

是否有任何小而轻的表达式,什么都不匹配,我可以在模板中使用,我不想要任何匹配?不幸的是,有时'+'或'*'被附加到正则表达式原子,因此我不能使用空字符串 - 这将引发"无需重复"错误.

Nad*_*mli 101

这不应该匹配任何东西:

re.compile('$^')
Run Code Online (Sandbox Code Playgroud)

因此,如果用'$ ^'替换regexp1,regexp2和regexp3,将无法找到匹配项.除非您使用多线模式.


经过一些测试,我找到了更好的解决方案

re.compile('a^')
Run Code Online (Sandbox Code Playgroud)

它不可能匹配,并且会比先前的解决方案更早失败.您可以将a替换为任何其他角色,但始终无法匹配

  • 正则表达式"$ ^"匹配空字符串,至少在某些实现中.第二个更好. (13认同)

Cha*_*ens 34

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

  • 对,我刚刚发布这个.如果您的语言支持前瞻,这是最好的方法.同样(?=)匹配每个字符串. (3认同)

Pet*_*ton 15

要匹配空字符串 - 即使在多行模式下 - 您也可以使用\A\Z,因此:

re.compile('\A\Z|\A\Z*|\A\Z+')
Run Code Online (Sandbox Code Playgroud)

不同的是,\A\Z是开始和结束字符串,而^$这些可以匹配的开始/结束线,因此$^|$^*|$^+可以潜在地匹配包含字符串换行符(如果启用的标志).

并且无法匹配任何内容(甚至是空字符串),只需尝试在字符串开头之前查找内容,例如:

re.compile('.\A|.\A*|.\A+')
Run Code Online (Sandbox Code Playgroud)

由于在\ A(根据定义)之前不能出现任何字符,因此始终无法匹配.


Ste*_*eef 5

也许'.{0}'