使用Python的re模块,为什么以下行为不同:
>>> r = re.compile(r'[][]')
>>> r.findall(r'[]')
['[', ']']
>>> r = re.compile(r'[[]]')
>>> r.findall(r'[]')
['[]']
>>> r.findall(r'][')
[]
答案 0 :(得分:16)
正则表达式“[[]]”匹配子串“[]”。第一个[在表达式中开始一个字符类,第一个]结束它。类中只有一个字符([),然后必须跟着第二个字符。所以表达式是“[”中的任何字符,后跟一个“]”。
答案 1 :(得分:4)
字符类以 [
开头,以第一个 ]
结束。
因此,表达式[][]
是一个字符类,其字符为]
和[
,因为字符类不能为空: [
{ {1}}的 ][
强>
表达式]
是一个只有[[]]
的字符类,之后是单个字符[
: ]
[
[
强> ]
答案 2 :(得分:0)
和r'[] []'形成一个字符类{'[',']'},并匹配'['或']'。