您如何在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)即可。编号从左到右,基于开放括号的位置(因此,嵌套组的编号要大于嵌套在其中的组的编号)。

    08-25 22:30