首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何备份正则表达式中的“内部”选择( () )?

如何备份正则表达式中的“内部”选择( () )?
EN

Stack Overflow用户
提问于 2009-10-09 19:54:49
回答 3查看 1.2K关注 0票数 2

如何在Regex?中反向引用内括号

样本数据是一份产品价目表,显示了根据采购数量不同的价格表。格式是quantityLow - quantityHigh : pricePer;倍数。

我使用LINQPad构造这个C# Regex表达式来分离各个部分,这显示了Regex数据分离的方便可视化。在本例中,存在“内部”括号(选择),从而创建了分层数据结构。

代码语言:javascript
运行
复制
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"

代码语言:javascript
运行
复制
- CaptureCollection (1 item) () Match "1-4;2;"
- Group Collection (4 items)  
    - CaptureCollection (1 item) () Group "5-9:1.89"
    - CaptureCollection (1 item) () Group "5"
    - CaptureCollection (1 item) () Group "9"
    - CaptureCollection (1 item) () Group "1.89"

代码语言:javascript
运行
复制
- CaptureCollection (1 item) () Match "5-9:1.89"

仅供参考:

  • ()括号组找到了可以由\1.\9引用的结果(我认为)。
  • \d匹配一个数字。+后匹配一个或多个数字。*匹配后为零或更多位数。?表示此匹配是可选的。
  • 。匹配一个字符。。在本例中匹配句点或小数点。
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-10-09 20:00:44

只需像往常一样使用\1 . \9 (或者在某些正则表达式中使用$1 . $9 )。编号是从左到右,基于打开的paren的位置(因此嵌套组的数目比嵌套组内的组(组)要高)。

票数 4
EN

Stack Overflow用户

发布于 2009-10-12 07:25:54

请注意,这是对Zim博士的评论的回应:

“奇怪地说,这两种方式似乎都很好。我找到了”监管者“,这至少说明了regex是如何分解的。如果它有一个功能来设置实现,我想我是在做生意。”

但我的回答太长了,不适合评论框。

不,你不需要逃避加号,在这种情况下,连字符。在字符类中,以下字符具有特殊的含义:]^-。这三个字符是唯一需要转义的字符(请注意,[不需要转义!)我说可能是因为这取决于这些元字符的位置。当放置在字符类的开头时,^只有一个特殊的含义(作为一个否定指示符),在其他地方,它不需要转义,只匹配文字^。举例说明:

代码语言:javascript
运行
复制
[^a]   // special meaning: matches any character except 'a'
[a^]   // matches 'a' or '^'
[\^a]  // matches '^' or 'a'

当放在字符类的开头或结尾时,连字符只有一个特殊的意义(作为范围指示符)。示例:

代码语言:javascript
运行
复制
[a-c]  // special meaning: matches 'a', 'b' or 'c'
[ac-]  // matches 'a', 'c' or '-'
[-ac]  // matches '-', 'a' or 'c'
[a\-c] // matches 'a', '-' or 'c'

毫无疑问,一些regex实现可能与我刚才发布的不同,但大多数语言都会遵守这些规则(至少我使用的所有语言!)正如您注意到的,在字符类中过度转义字符是安全的:它不会造成任何伤害。类[+][\+]都将匹配文字+。IMHO,第一个是首选的,因为我发现一个正则表达式太多的逃避很难读。但是,有些人会不同意我的观点,并发现使用转义(虽然不是必要的),文字+被匹配而不是贪婪的量词,这是非常明显的。

希望这能把事情弄清楚。

票数 4
EN

Stack Overflow用户

发布于 2009-10-09 20:27:37

另外,字符类总是匹配单个字符,而“普通”元字符不适用于它们。所以,[-|\+]类与-|+这三个字符中的一个匹配。正如您所看到的,逻辑或元字符在字符类中没有特殊意义。并且您不需要在字符类中转义+字符,因此应该这样做:[-+]

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1545751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档