我有一个相当复杂的以下模式:
^(?=.*\b(?:averages?|standard|means?)\b)(?=.*\b(?:goods?)\b)(?=.*\b(?:costs|cost to the company|sold by vendors?|bought from vandors?)\b).*$
与以下句子非常匹配:
什么是平均商品成本。
给我一份从供应商处购买的商品的标准清单。
列出供应商销售的所有标准商品。
我必须从句子中删除匹配的模式部分,即
什么是 __ _______ 列表。
为 ______ 提供 ________ 。
列出所有 _____________ 。
我正在尝试拆分模式,并考虑为模式的每个拆分实例执行匹配,但它令人生畏,因此寻找替代解决方案谢谢。
我试图让以下工作。
string[] splitPat = value.Split(new string[] { ")(" }, StringSplitOptions.None);
感谢
答案 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.
average
,goods
和costs
成为您比赛中的第一,第二和第三组。
尝试在此播放:
http://rubular.com/r/urb1raJ3W7
您可以尝试不同的测试字符串,并查看它将提取的组。
然后在.NET中,您可以使用Match.Groups来访问匹配中的组。如果您想要更容易维护,甚至可以命名组。