python python正则表达式提取数字 - “无匹配”的正则表达式语法?



python正则表达式字母 正则表达式search (7)

我有一个大量使用regexp的python模板引擎。 它使用串联,如:

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

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

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


Answers

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

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

区别在于\A\Z字符串的开头和结尾,而^$这些可以匹配行的开头/结尾,因此$^|$^*|$^+可能匹配包含换行符的字符串(如果标志已启用)。

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

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

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


你可以用
\z..
这是字符串的绝对结尾,后跟两个任意内容

如果最后加上+* ,这仍然有效,拒绝匹配任何东西


或者,使用一些列表推导来删除无用的正则表达式条目并加入以将它们放在一起。 就像是:

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

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


这不应该匹配任何东西:

re.compile('$^')

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

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

re.compile('a^')

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


"()"

什么都不匹配,什么也不做


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


{'color': 'red', 'owner': 'Carl', 'model': 'Ferrari'}

对于在两个词典('b')中都带有键的项目,您可以通过将最后一个键入到输出中来控制哪一个最终出现在输出中。





python regex