所以,如果我有一个正则表达式,例如:'[ab] c]'那么我希望re.compile()抛出一个错误,说错过'['但是它使用后者']'字面意思并匹配'ac] '作为一个正确的字符串。
我不遵循此行为,因此无法向用户可以输入的正则表达式添加验证。 请帮忙。
答案 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]*
这就是搜索变得贪婪的原因。