【发布时间】:2010-10-13 20:13:55
【问题描述】:
我必须读入一个包含多个坐标的文件。该文件的结构如下:
X1/Y1,X2/Y2,X3/Y3,X4/Y4
其中 X 和 Y 是正整数。为了解决这个问题,我想使用一个正则表达式(我认为这通常是一个好主意,因为模式改变时重构最少)。
因此我开发了以下正则表达式:
Regex r = new Regex(@^(?<Coor>(?<X>[0-9]+)/(?<Y>[0-9]+))(,(?<Coor>(?<X>[0-9]+)/(?<Y>[0-9]+)))*$");
但是,当我在数据上测试这个正则表达式时,例如:
1302/1425,1917/2010
Regex 似乎只记得最后一个 X、Y 和 Coor 组。在这种情况下,Coor 是“12/17”,X 是“1917”,Y 是“2010”。有没有办法生成某种树。所以我找到了一个对象,它给了我所有的 Coor 表达式,每个 Coor 下都有一个 X 和 Y 分量?
如果可能,我只想使用一个正则表达式,因为格式可能会更改为另一种。
【问题讨论】:
-
编辑:我还需要验证正则表达式,使用 Regex.Matches 不会验证字符串。
-
你知道预计格式会发生什么样的变化吗?
-
这没有递归。您可能是指迭代。
-
@CommuSoft:将验证与提取值分开进行而不是同时尝试两者会更简单。你能做到吗?
-
我想我确实可以先验证完整的正则表达式,然后使用 Matches 方法从每个片段中提取数据。但是,我也对解决此类问题的一般方法感兴趣。例如,如果逗号会(我认为不会)被更复杂的结构替换,那么可以捕获错误匹配。有没有一种通用的方法来构建这样的树。
标签: c# regex recursion capturing-group