将排除捕获组的正则表达式

Posted

技术标签:

【中文标题】将排除捕获组的正则表达式【英文标题】:Regex that will exclude a capture group 【发布时间】:2012-02-17 17:39:07 【问题描述】:

我正在编写一个正则表达式,我需要捕获以“get”开头的复数字符串。例如 getContactsgetBuildings 应该匹配正则表达式。但是,有时文本可能等于 getDetails 或 get**Details。我不希望正则表达式包含这些。

我可以想出一个包含匹配组“详细信息”的正则表达式,但我想排除该捕获组,而不是包含它。

[Gg]et?\w+([Dd]etail)s

我不是很擅长正则表达式,但我对我写的内容的理解如下:

匹配“g”或“G”,然后是“et”,然后是可选的任何单词字符,然后是匹配的组,然后是“s”。

如何排除包含“详细信息”一词的结果?

【问题讨论】:

getDetailsAndBars 是否应该匹配? 应该getInfo 匹配吗?您原来的正则表达式似乎排除了这种情况。 [Gg]et? 中为什么会有问号? ? 只是使 t 可选。这是你的意图吗? 【参考方案1】:

这样的事情可能对你有用:

\b[Gg]et(?!\w*[Dd]etails)\w+s\b

【讨论】:

否定前瞻 (?!...) 确保 Details 不是该匹配的一部分,\bs 用于将匹配锚定在单词的开头/结尾,否则 GetBars 将匹配这刺痛setGetBarsX【参考方案2】:

我相信您正在寻找零宽度负前瞻...

http://www.regular-expressions.info/lookaround.html

[Gg]et(?![Dd]etail)\w+s

假设您要排除“获取详细信息”和“获取信息”但接受“获取页面”和“获取我的详细信息”(注意原始正则表达式中的尾随 s 已经排除了“获取信息”)

【讨论】:

您可能希望在后面加上\b$,这样您就不会匹配getSassDetails 中的getSass 太棒了!那更近了。但看起来它仍然匹配带有详细信息的字符串:regexr.com?301ut 你能告诉我如何排除这些字符串吗? -1,?后面的t是错误的,op似乎表明Details不必和get相邻。 @Qtax 哎呀,是的,是从他的原版中复制的,正在考虑否定匹配方面,但没有注意到。 实际上背后的负面看法涵盖了您放入正则表达式的情况,但不包括 getSomeDetailsAndNotOthers... 所以如果您也需要排除它,请使用 Qtax 的解决方案。我只是想排除以“详细信息”结尾的东西......

以上是关于将排除捕获组的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

具有多个捕获组的 R 中的正则表达式组捕获

正则表达式:捕获重复捕获组的所有单个实例 [重复]

如何获取正则表达式捕获组的值? [复制]

正则表达式 c# 获取捕获组的子组

具有捕获组的有效正则表达式,但 sed 脚本不起作用

具有不同量词的正则表达式捕获组