Python re.compile使用不正确的字面意思而不是抛出错误

时间:2016-05-19 01:56:29

标签: python regex

所以,如果我有一个正则表达式,例如:'[ab] c]'那么我希望re.compile()抛出一个错误,说错过'['但是它使用后者']'字面意思并匹配'ac] '作为一个正确的字符串。

我不遵循此行为,因此无法向用户可以输入的正则表达式添加验证。 请帮忙。

2 个答案:

答案 0 :(得分:1)

在Python模仿的a specification for PERL regular expressions中,它说:

  

任何单个字符都匹配,除非它是a   这里描述的具有特殊含义的元字符   上方。

列出了许多很多元字符,但是,特别是单个]似乎不是元字符;只有完整[...]。因此,根据此规范,您遇到的行为似乎是正确的。

A specification for "perl compatible" regular expressions给出了它声称的元字符的完整列表,它们是:

\ ^ $ . [ | ( ) ? * + {

并注意到"大多数角色代表自己的模式"。

我怀疑这与通过少量无效模式使正则表达式尽可能简洁的想法有关。

答案 1 :(得分:1)

在REGEX:

  • []会出错:不完整的字符类
  • ]匹配字符]字面意思
  • [会出错:不完整的字符类

这是一个解析限制,有许多括号表示法,并且它不是特定于python的。如果启动元序列([< - open bracket),解析器必须将其与结束括号或错误匹配。 [a[d] vs [a[d]*这就是搜索变得贪婪的原因。