如何确定模式的哪个部分在Regex中匹配

时间:2014-04-16 12:40:17

标签: c# regex pattern-matching

我有一个相当复杂的以下模式:

^(?=.*\b(?:averages?|standard|means?)\b)(?=.*\b(?:goods?)\b)(?=.*\b(?:costs|cost to the company|sold by vendors?|bought from vandors?)\b).*$

与以下句子非常匹配:

  1. 什么是平均商品成本。

  2. 给我一​​份从供应商处购买的商品的标准清单。

  3. 列出供应商销售的所有标准商品。

  4. 我必须从句子中删除匹配的模式部分,即

    1. 什么是 __ _______ 列表。

    2. ______ 提供 ________

    3. 列出所有 _____________

    4. 我正在尝试拆分模式,并考虑为模式的每个拆分实例执行匹配,但它令人生畏,因此寻找替代解决方案谢谢。

      我试图让以下工作。

      string[] splitPat = value.Split(new string[] { ")(" }, StringSplitOptions.None);
      

      感谢

1 个答案:

答案 0 :(得分:1)

通过将它们包装在一组额外的()中,只需将您希望能够提取的部分放入组中。例如:

^(?=.*\b((?:averages?|standard|means?))\b)(?=.*\b((?:goods?))\b)(?=.*\b((?:costs|cost to the company|sold by vendors?|bought from vandors?))\b).*$

匹配此字符串时:

What is average goods costs.

averagegoodscosts成为您比赛中的第一,第二和第三组。

尝试在此播放:

http://rubular.com/r/urb1raJ3W7

您可以尝试不同的测试字符串,并查看它将提取的组。

然后在.NET中,您可以使用Match.Groups来访问匹配中的组。如果您想要更容易维护,甚至可以命名组。