【问题标题】:Regex Match Collection Identifying partial match .NET正则表达式匹配集合识别部分匹配.NET
【发布时间】:2023-04-03 12:06:01
【问题描述】:

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

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。 (但缺少购买)

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

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

提前致谢。

【问题讨论】:

  • 单独检查每个单词?

标签: c# .net regex wildcard


【解决方案1】:

是的,但是...IndexOf

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

\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(?:goods?|things?|items?)\b) 块的商品。您能否建议如何使解决方案匹配此块中提到的多个单词?我无法为每个单词制作单独的块,因为它们太多了。谢谢
  • 对不起,不明白你现在在问什么。 (我提到的两种解决方案都有效。)你能解释一下吗?
  • 对不起。当我匹配字符串 pat = ^(?=.*\b(?:goods?|things?|items?)\b)(?=.*\bbought\b)(?=.*\bid\b) .*$ 与 match 集合上方的解决方案仅匹配 ( id ,购买) 但忽略第三块中的“商品”。谢谢
猜你喜欢
  • 2011-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 2017-11-29
  • 2017-06-23
  • 1970-01-01
相关资源
最近更新 更多