正则表达式以验证文本中的唯一单词

时间:2012-09-01 10:06:10

标签: .net regex

我需要正则表达式来验证文本中所有单词的文本必须是唯一的。 例如我的文字就像

有效的文字 - > "超前|支付|正|下一页"

无效的文字 - > "超前|支付|支付|正|下一页|超前"

单词不是修复它可以是任何东西。

请帮助我如何在.net

中实现它

5 个答案:

答案 0 :(得分:3)

我认为你不能用正则表达式实现这一点,除非明确知道单词列表(如枚举)。

但是,在.Net中,您可以通过多种其他方式轻松完成。

首先,让我们试试C#和Linq:

using System;
using System.Linq;

string myText = "aaa|bbb|ccc|aaa";
var parts = myText.Split('|');
var uniques = parts.Distinct();
if(uniques.Count() != parts.Length) throw new ArgumentException("Not unique!");

答案 1 :(得分:2)

我不确定.net,但正则表达式会找到一个单词后跟另一个匹配的单词将是:

\b(\w+)\b.*\b\1\b

也就是说,一个单词分隔符,一个单词字符序列,一个单词分隔符,任意数量的任何字符(换行符除外)然后重复单词,并在其周围分词。

并非所有正则表达式引擎都允许\ 1引用同一正则表达式中的上一个匹配。

答案 2 :(得分:1)

LinQ

这很简单
string curText = "Advance|Paid|Paid|Regular|Next|Advance";
string valid = string.Join("|", curText.Split('|').Distinct());
if(valid.Length != curText.Length)  
    // error.....

答案 3 :(得分:0)

为什么要使用RegEx呢?只需检查输入中字符串X的出现次数,并检查它是否最多为1.在您的示例中,拆分为“|”应该很容易(可以通过RegEx完成,但简单地将字符串标记化应该更容易)。

答案 4 :(得分:0)

是的,可以使用反向引用:

(?:^|\|)([a-z]+)\|.+\|\1(?:\||$)

这将使表达式与重复的单词匹配,并将单词的第一个实例作为一个组。要么否定它以查看单词是否重复,要么使用替换来删除单词。

使用空格而不是|

\b([a-z]+)\b.+\b\1\b