Python 比较两个正则表达式[ab]*和([ab])\1

Python 比较两个正则表达式[ab]*和([ab])\1,python,regex,Python,Regex,我想知道的是 为什么[ab]*不重复匹配的部分,而是重复[ab]。换句话说,为什么它与a*或b*不一样 为什么([ab])\1重复匹配的部分,但不重复[ab]。换句话说,为什么它只能匹配aa和bb,而不能匹配ab和ba 是因为()的优先级低于[],而*的优先级高于[]?我想知道,将这些视为操作员是否不合适。谢谢。他们俩完全不同 当你说[ab]*时,它意味着a或b的次数为零或更多。因此,它将匹配“,”a“,”b“,以及a和b的任意组合 但是([ab])\1意味着将匹配a或b,然后捕获它\1称为

我想知道的是

  • 为什么
    [ab]*
    不重复匹配的部分,而是重复
    [ab]
    。换句话说,为什么它与
    a*
    b*
    不一样

  • 为什么
    ([ab])\1
    重复匹配的部分,但不重复
    [ab]
    。换句话说,为什么它只能匹配
    aa
    bb
    ,而不能匹配
    ab
    ba


是因为
()
的优先级低于
[]
,而
*
的优先级高于
[]
?我想知道,将这些视为操作员是否不合适。谢谢。

他们俩完全不同

当你说
[ab]*
时,它意味着
a
b
的次数为零或更多。因此,它将匹配“,”a“,”b“,以及
a
b
的任意组合


但是
([ab])\1
意味着将匹配
a
b
,然后捕获它<代码>\1称为反向引用。它指的是正则表达式中已捕获的组。在我们的例子中,
([ab])
。因此,如果捕获了
a
,那么它将只再次匹配
a
。如果它是
b
,则它将仅再次匹配
b
。它只能匹配
aa
bb

它们完全不同

[ab]*
当你说
[ab]*
时,它意味着
a
b
的次数为零或更多。因此,它将匹配“,”a“,”b“,以及
a
b
的任意组合


但是
([ab])\1
意味着将匹配
a
b
,然后捕获它<代码>\1称为反向引用。它指的是正则表达式中已捕获的组。在我们的例子中,
([ab])
。因此,如果捕获了
a
,那么它将只再次匹配
a
。如果它是
b
,则它将仅再次匹配
b
。它只能匹配
aa
bb

它们完全不同

[ab]*
当你说
[ab]*
时,它意味着
a
b
的次数为零或更多。因此,它将匹配“,”a“,”b“,以及
a
b
的任意组合


但是
([ab])\1
意味着将匹配
a
b
,然后捕获它<代码>\1称为反向引用。它指的是正则表达式中已捕获的组。在我们的例子中,
([ab])
。因此,如果捕获了
a
,那么它将只再次匹配
a
。如果它是
b
,则它将仅再次匹配
b
。它只能匹配
aa
bb

它们完全不同

[ab]*
当你说
[ab]*
时,它意味着
a
b
的次数为零或更多。因此,它将匹配“,”a“,”b“,以及
a
b
的任意组合

但是
([ab])\1
意味着将匹配
a
b
,然后捕获它<代码>\1称为反向引用。它指的是正则表达式中已捕获的组。在我们的例子中,
([ab])
。因此,如果捕获了
a
,那么它将只再次匹配
a
。如果它是
b
,则它将仅再次匹配
b
。它只能匹配
aa
bb

[ab]*
这也将不匹配任何内容、
a
b
aaa
bbb
,以及字符串的任何长度。匹配不受长度限制,并且由于没有捕获组,因此它声明匹配由所有
a
b
字符组成的任意长度的字符串

([ab])\1
在这种情况下,它强制匹配的字符串为两个字符,因为没有重复。首先,它必须匹配paren中的内容(用于捕获组1),然后它必须匹配在组1中捕获的内容,这会隐式地强制匹配为两个字符长,且两个字符相同

这也将不匹配任何内容、
a
b
aaa
bbb
,以及字符串的任何长度。匹配不受长度限制,并且由于没有捕获组,因此它声明匹配由所有
a
b
字符组成的任意长度的字符串

([ab])\1
在这种情况下,它强制匹配的字符串为两个字符,因为没有重复。首先,它必须匹配paren中的内容(用于捕获组1),然后它必须匹配在组1中捕获的内容,这会隐式地强制匹配为两个字符长,且两个字符相同

这也将不匹配任何内容、
a
b
aaa
bbb
,以及字符串的任何长度。匹配不受长度限制,并且由于没有捕获组,因此它声明匹配由所有
a
b
字符组成的任意长度的字符串

([ab])\1
在这种情况下,它强制匹配的字符串为两个字符,因为没有重复。首先,它必须匹配paren中的内容(用于捕获组1),然后它必须匹配在组1中捕获的内容,这会隐式地强制匹配为两个字符长,且两个字符相同

这也将不匹配任何内容、
a
b
aaa
bbb
,以及字符串的任何长度。匹配不受长度限制,并且由于没有捕获组,因此它声明匹配由所有
a
b
字符组成的任意长度的字符串

([ab])\1
在这种情况下,它强制匹配的字符串为两个字符,因为没有重复。首先,它必须匹配paren中的内容(用于捕获第一组),然后它必须匹配matc