【发布时间】:2022-01-14 16:58:15
【问题描述】:
如何在 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”
- 组集合(4 项)
仅供参考:
- () 括号组找到了可以被 \1..\9 引用的结果(我认为)。
- \d 匹配单个数字。后面的 + 匹配一位或多位数字。 * 在匹配零个或多个数字之后。 ? after 说这个匹配是可选的。
- 。匹配单个字符。 \。在这种情况下匹配句点或小数。
【问题讨论】:
标签: regex