多词的正则表达式异或操作

3
我想知道是否有可能使用正则表达式检查字符串中是否存在一个或多个单词数组中的单词。这涉及到多个条目的异或运算...
字符串可以包含0个或1个以下的单词:
- Morning - Evening - Night
以下句子应该得到以下结果:
- This is a beautiful day => 匹配(0个单词) - How are you this Morning? => 匹配(1个单词) - This Morning, it was the Night! => 不匹配(1个单词) - This Night, we will have a wonderful Morning => 不匹配(2个或更多单词)
感谢您的帮助!
1个回答

1

编辑:

纯正则表达式的解决方案应该是这样的:

string words = string.Join("|", yourWordsArray);
string regex = "^(?!.*\b(" + words + ")\b.*\b(" + words + ")\b).*\b(" + words + ")\b.*$";

/编辑

您所要求的是“查找每个字符串,其匹配项不超过1个”。在.NET中,这相当容易,因为您可以使用以下结构:

return !(Regex.Matches("your text", "your regex").Count > 1)

而您的正则表达式可能类似于:

string regex = string.Join("|", yourWordsArray);

不是所有编程代码中最漂亮的,但也不算太糟糕。

谢谢你的 .Net 技巧,但是我有一个通用的正则表达式验证器,所以我必须找到一种使用正则表达式而不是使用 C# 技巧来解决我的问题的方法。还有其他建议吗? - Raphaël
哦,对不起,我以为你是因为你使用了 .net 标签。我会为你尝试编写一个正则表达式。 - Voidpaw
如果有帮助的话,我总会有三个独特的词语,但是为了我的个人训练,我很高兴看到更通用的方式来解决这个问题 :-) - Raphaël
假设您需要尽快得到答案,我现在会暂时将您链接到 https://dev59.com/i2oy5IYBdhLWcg3wHabt#8764935 ,该链接有关于此的精彩帖子。 - Voidpaw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接