我有一个大量使用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替换为任何其他角色,但始终无法匹配
Cha*_*ens 34
(?!)应始终无法匹配.这是零宽度负面预测.如果括号中的内容匹配则整个匹配失败.鉴于它没有任何内容,它将失败匹配任何东西(包括什么都没有).
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(根据定义)之前不能出现任何字符,因此始终无法匹配.
| 归档时间: |
|
| 查看次数: |
63343 次 |
| 最近记录: |