C# 识别部分匹配.NET的正则表达式匹配集合

C# 识别部分匹配.NET的正则表达式匹配集合,c#,.net,regex,wildcard,C#,.net,Regex,Wildcard,我有一个字符串模式,用于匹配用户的话语。我正在努力使用正则表达式的match collection功能 string pat = ^(?=.*\b(?:goods?|things?|items?)\b)(?=.*\bbought\b)(?=.*\bid\b).*$ string user = "I would like to see id of bought goods."; 用户的正确匹配语句将是。 我想查看购买商品的id。 问题: 是否有可能使用正则表达式中的匹配集合功能来确定用户是否只输

我有一个字符串模式,用于匹配用户的话语。我正在努力使用正则表达式的match collection功能

string pat = ^(?=.*\b(?:goods?|things?|items?)\b)(?=.*\bbought\b)(?=.*\bid\b).*$
string user = "I would like to see id of bought goods.";
用户的正确匹配语句将是。 我想查看购买商品的id。

问题:

是否有可能使用正则表达式中的匹配集合功能来确定用户是否只输入了所需语句的一部分,即。 我想看看商品的id。(但缺少购买的

我需要检测图案/匹配的缺失部分

这样,用户就可以得到提示,并被告知他/她在话语中错过了购买


提前谢谢。

是的,但是<代码>索引of

是的,在这里使用匹配集合甚至捕获集合在技术上是可行的(但请参见下面的讨论)。比如说,

\b(?:(I|would|like|to|see|id|of|bought|goods)\b\s*)+
将在一次过程中匹配整个句子,组1的捕获集合将包括所有出现的单词

或者,您可以使用

\b(?:I|would|like|to|see|id|of|bought|goods)\b
将所有匹配项放置在匹配项集合中


但是,您必须检查匹配集合或捕获集合,以查看哪些单词可能丢失。完成所有这些工作后,您最好使用
IndexOf

分别查找每个单词(如@Jerry所建议的),然后分别检查每个单词?您好,zx81,谢谢您的建议。我尝试了你的方法,但只收集匹配(id,购买)。忽略匹配来自^(?=.*\b(?:货物?|物品?|项目?\b)块的货物。您能否建议如何使解决方案与本模块中提到的多个单词匹配?我不能为每一个单词做单独的块,因为它们太多了。谢谢你,我不明白你现在在问什么。(我提到的两种解决方案都有效。)你能解释一下吗?对不起。当我匹配字符串pat=^(?=.*\b(?:goods?| things?| items?\b)(?=.*\b应该\b)(?=.*\bid\b)。*$与匹配集合上方的解决方案仅匹配(id,bunded),但忽略第三个块中的“goods”。谢谢