我有一个这样的列表:
points = ( (41,69) (39,69) ) ,
points = ( (41,73) (39,73) (39,71) ) ,
points = ( (9,15) (0,15) ) ,
points = ( (15,15) (9,15) ) ,
points = ( (15,22) (9,22) (9,15) ) ,
我的目标是把每一行的元组分成不同的组。所以对于第一行,我想得到两组具有(41,69)
和(39,69)
的,对于第二行,我想要得到三组具有(41,73)
、(39,73)
和(39,71)
的
我尝试了这个正则表达式:
points = ( (((d+,d+)) )+ )
但它只返回最后一个元组,例如第一行(39,69)
和(39,69)
,第二行(39,71)
和(39,71)
(也是两组,而不是我所期望的三组(。
这个怎么样。它将为每个元组提供一次。这很简单,如果你不需要它所在的上下文。
([^()]*)
https://regex101.com/r/I294M6/1
捕获组的可变数量不是一个好办法。不同的发动机可能会对它们进行不同的编号。例如,abcdef
中的(www)+
将与abc
和def
匹配,但第一个捕获组是什么?可能是其中之一。
从我在演示中看到的,它通常是def
,但我不会依赖它。
捕获的组应该显式编写,这不符合您的要求。
无论如何,我不会使用这样的构造,也不会使用单元组匹配和迭代匹配,而不是过度捕获组。我推荐谓词答案中建议的模式:([^()]*)
说明:(
/)
-从字面上匹配(
和)
[^()]
-匹配除(
和)
之外的任何内容,无需在字符类中转义它们