有没有使用正则表达式匹配重复字符集的方法?例如:重复多个字符正则表达式
ABCABCABCABCABC
ABC{5}
我知道这是错误的。但是有什么可以与这种效果相匹配吗?
更新:
您可以使用嵌套的捕获组吗?那么像(?<cap>(ABC){5})
?
有没有使用正则表达式匹配重复字符集的方法?例如:重复多个字符正则表达式
ABCABCABCABCABC
ABC{5}
我知道这是错误的。但是有什么可以与这种效果相匹配吗?
更新:
您可以使用嵌套的捕获组吗?那么像(?<cap>(ABC){5})
?
用圆括号括起你想要重复的正则表达式。举例来说,如果你要重复5次的ABC
:
(ABC){5}
或者,如果你想要的任何数量的重复(0或更多):
(ABC)*
或者一次或多次重复:
(ABC)+
编辑回复更新
正则表达式中的括号会做两件事;他们将正则表达式中的项目序列组合在一起,以便您可以将运算符应用于整个序列而不是最后一个项目,并捕获该组的内容,以便可以提取与该子表达式匹配的子字符串在正则表达式中。
你可以嵌套括号;他们从第一次开场白开始计算。例如:
>>> re.search('[0-9]* (ABC(...))', '123 ABCDEF 456').group(0)
'123 ABCDEF'
>>> re.search('[0-9]* (ABC(...))', '123 ABCDEF 456').group(1)
'ABCDEF'
>>> re.search('[0-9]* (ABC(...))', '123 ABCDEF 456').group(2)
'DEF'
如果你想避免捕捉当你分组,您可以使用(?:
。如果您不希望使用括号来组合序列,以便应用运算符来更改匹配的编号,这会很有帮助。它也更快。
>>> re.search('[0-9]* (?:ABC(...))', '123 ABCDEF 456').group(1)
'DEF'
因此,要回答你的更新,是的,你可以使用嵌套捕获组,甚至避免与内组的所有拍摄:
>>> re.search('((?:ABC){5})(DEF)', 'ABCABCABCABCABCDEF').group(1)
'ABCABCABCABCABC'
>>> re.search('((?:ABC){5})(DEF)', 'ABCABCABCABCABCDEF').group(2)
'DEF'
(ABC){5}
应该为你
括号工作“()”用于在更大,更复杂的正则表达式中对字符和表达式进行分组。紧随该组的紧随量词适用于整个组。
(ABC){5}
ABC {5}与ABCCCCC匹配。要匹配5个ABC,您应该使用(ABC){5}。圆括号用于对一组字符进行分组。您还可以设置与ABCABCABC,ABCABCABCABC和ABCABCABCABCABC匹配的(ABC){3,5}等事件的间隔。 (ABC){1,}表示与(ABC)+完全相同的一次或多次重复。(ABC){0,}表示0或更多重复,与(ABC)*完全相同。
至于问题更新-
您可以嵌套捕获组。捕获组索引按每个开放表格递增。
(((ABC)*)(DEF)*)
喂养该正则表达式ABCABCABCDEFDEFDEF,捕获组0匹配整个事情,1也是整个事情,2是ABCABCABC,3是ABC,和图4是DEF(因为星是捕获组之外) 。
如果你有一个捕获组和重复外面内变化,那么事情可能会变得有些靠不住的,如果你不希望它...
(a[bc]*c)*
饲喂时abbbcccabbc将返回最后与捕获组1匹配,在本例中只是abbc,因为捕获组通过重复操作符重置。
我会在这里使用+而不是*,因为*会匹配0次出现的(ABC)。 – Robusto 2010-09-02 20:34:40
(美国广播公司){3,5}也为一系列的重复 – 2010-09-02 20:36:46
哦,哦。我想()只是出于某种原因用于捕获的东西。但这是有道理的。选择第一个 – Falmarri 2010-09-02 20:37:07