我需要正则表达式来验证文本中所有单词的文本必须是唯一的。 例如我的文字就像
有效的文字 - > "超前|支付|正|下一页"
无效的文字 - > "超前|支付|支付|正|下一页|超前"
单词不是修复它可以是任何东西。
请帮助我如何在.net
中实现它答案 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