【问题标题】:Regular expression group matching in .NET.NET 中的正则表达式组匹配
【发布时间】:2013-03-09 01:34:38
【问题描述】:

我有这个字符串:

of cabbages and kings and more kings

我想根据这个条件进行匹配:

- Any instance of "king"
- Any instances of "cab" OR "goat"
- No instances of "bill"

此正则表达式适用于 IsMatch():

^(?=.*?(king))(?=.*?(cab|goat))(?=.*?(bill))

但它只返回 1 个长度为 0 的组。有没有办法让它返回匹配的组,以便我们可以在之后读取匹配的文本?

【问题讨论】:

  • 它不起作用(除非你的规范是错误的),什么匹配的文本?你的意思是整个字符串?
  • 你能发布输入和预期输出吗?
  • 输入文本是“of cabbages and kings and more kings”,我希望从 Regex.GetMatches 中得到一个包含“king”和“cab”的 MatchCollection。
  • “没有 'bill' 的实例”必须是否定前瞻(例如(?!.*?(bill))

标签: .net regex


【解决方案1】:

因为您的模式仅使用环视,它只会检查模式,但绝不会包含匹配的模式除了 环视中的任何组 ..

如果要捕获完整的字符串,请使用Match 方法和给定的模式

^(?=.*king)(?=.*(?:cab|goat))(?=.*bill).*$

如果匹配模式,这个正则表达式将匹配 group 0 中的完整字符串..

【讨论】:

  • 是否可以为每个术语返回匹配项(或组),而不是匹配整个字符串?像“国王”和“出租车”?
  • @JonTackabury 是的..您必须使用match 方法..您的正则表达式将完美运行..即它会捕获前瞻中的单词,因为您在前瞻中使用组......
  • 这似乎只是捕获整个字符串,而不仅仅是匹配的部分,例如“king”。
  • @JonTackabury 你能提供一个你正在使用的示例字符串吗?上面的逻辑似乎对我来说很好。 *编辑 - 没关系;我刚刚注意到你上面的例子。 Some1.Kill.The.DJ 的建议对我来说也很好。
猜你喜欢
  • 1970-01-01
  • 2017-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
相关资源
最近更新 更多