Python 正则表达式中的分组

0 投票
2 回答
521 浏览
提问于 2025-04-16 20:01

我在用Python玩正则表达式,下面是我到目前为止的成果(在RegExr上调试过):

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

我想匹配的内容大概是这样的:

@@VAR:param1@@
@@VAR:param2:param3@@
@@VAR:param4:param5:param6:0@@

简单来说,你要么有VAR要么有MVAR,后面跟着一个冒号,然后是一些参数名,最后是结束字符(@@)或者另一个冒号和一个参数。

在我的正则表达式中,我得到了几个分组:VAR,第一个参数,然后是参数列表中的最后一个东西(在最后一个例子中,第三个分组会是0)。我知道分组是通过(...)来创建的,但有没有办法让正则表达式匹配多个分组,这样param5、param6和0就能各自放在自己的分组里,而不是最多只能有三个分组呢?

我想避免先匹配这个字符串再在冒号上分割,因为我觉得这可以通过正则表达式直接做到。也许我这个思路不太对。

总之,我想看看能不能在匹配的过程中找到并分割,而不是事后再处理。

2 个回答

3

如果这个格式是固定的,那就不需要用正则表达式,这样反而会让事情变得复杂。直接用 split 就可以了:

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

这样就可以搞定了。

1

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

撰写回答