2011-06-21 55 views
0

所以我在Python中使用正则表达式。这是我到目前为止已经得到了(通过RegExr调试):在Python中分组正则表达式

@@(VAR|MVAR):([a-zA-Z0-9]+)+(?::([a-zA-Z0-9]+))*@@ 

所以我想要匹配是这样的东西:

@@VAR:[email protected]@ 
@@VAR:param2:[email protected]@ 
@@VAR:param4:param5:param6:[email protected]@ 

从本质上讲,你要么VAR或无功其次由一个冒号然后是一些参数名称,然后是结尾字符(@@)或另一个:和一个参数。

所以,我得到的关于正则表达式的组是VAR,第一个参数,然后是参数列表中的最后一个东西(对于最后一个例子,第三个组将是0)。我知道组是由(...)创建的,但有没有什么方法可以使正则表达式匹配多个组,因此参数5,参数6和0位于它们自己的组中,而不是最多只有三组?

我想避免必须匹配这个字符串,然后必须拆分:,因为我认为这是可以用正则表达式完成的。也许我正在接近这个错误的方式。

本质上,我试图看看我是否可以在匹配过程中找到并拆分,而不是在后期处理中。

回答

1

正则表达式中的组数是固定的。您需要以某种方式进行后期处理。

+0

好的,好吧,那么几乎可以回答这个问题。我会用正则表达式找到字符串,然后使用split来解析它。 – wibarr

3

如果这种格式是固定的,你不需要regex,它只是让它更难。只需使用split

text.strip('@').split(':') 

应该这样做。

+0

我会,但正则表达式字符串穿插在正常文本中。我想将这些字符串进行正则表达式解析,但看起来我会被迫使用split。 – wibarr

+0

如果你想得到'@@ @ @@'字符串,只需将你的正则表达式匹配模式简化为'@@([^ @] +)@@' – rafalotufo