您如何在Regex中回引用内部括号?
样本数据是一个产品价格清单,显示了基于所购买数量的不同价格跌幅。格式为quantityLow-quantityHigh:pricePer;倍数。
我使用LINQPad构造了此C#Regex表达式以分离各部分,这显示了Regex数据分离的便捷可视化。在此示例中,存在“内部”括号(选择),从而创建了分层数据结构。
string mys = "1-4:2;5-9:1.89";
Regex.Matches (mys, @"((\d+)[-|\+](\d*):(\d+\.?\d*);?)").Dump(); // Graphically show
分解为(匹配就是一切。在匹配中,有一个匹配和一个组匹配。在组匹配中有几个匹配。)
MatchCollection(2个项目)
组收藏(4个项目)
CaptureCollection(1个项目)()组“1-4:2;” CaptureCollection(1个项目)()组“1” CaptureCollection(1个项目)()组“4” CaptureCollection(1个项目)()组“2” CaptureCollection(1个项目)()匹配“1-4; 2;” 组收藏(4个项目)
CaptureCollection(1个项目)()组“5-9:1.89” CaptureCollection(1个项目)()组“5” CaptureCollection(1个项目)()组“9” CaptureCollection(1个项目)()组“1.89” CaptureCollection(1个项目)()匹配“5-9:1.89”
仅供参考:
()括号组找到了可以由\ 1 .. \ 9引用的结果(我认为)。 \ d匹配一个数字。后面的+匹配一个或多个数字。 *匹配零个或多个数字后。 ?之后说这个比赛是可选的。 。匹配一个字符。 \。在这种情况下,匹配句点或小数。 只需像通常那样使用\1
... \9
(或在某些正则表达式实现中使用$1
... $9
)即可。编号从左到右,基于开放括号的位置(因此,嵌套组的编号要大于嵌套在其中的组的编号)。