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

时间:2014-07-05 16:36:06

标签: c# .net regex wildcard

我有一个字符串模式,旨在匹配用户的话语。我正在努力与正则表达式的比赛收集功能。

string pat = ^(?=.*\b(?:goods?|things?|items?)\b)(?=.*\bbought\b)(?=.*\bid\b).*$
string user = "I would like to see id of bought goods.";

来自用户的正确匹配话语将是.i.e。 我想查看已购买商品的ID。

问题:

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

我需要检测模式/匹配的缺失部分。

这样可以提示用户并告知他/她在话语中错过了 已购买

提前致谢。

1 个答案:

答案 0 :(得分:1)

是的,但是...... IndexOf

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

\b(?:(I|would|like|to|see|id|of|bought|goods)\b\s*)+

将在一次传递中匹配整个句子,第1组的Capture Collection将包含所有出现的单词。

或者,您可以使用

\b(?:I|would|like|to|see|id|of|bought|goods)\b

将所有匹配项放入匹配集合中。

但是,您必须检查匹配集合或捕获集合以查看可能缺少的单词。通过所有这些工作,您最好使用IndexOf

分别查找每个单词(如@Jerry建议的那样)