C# 防止重复标记的正则表达式
你能帮我找到一个表达方式来接受这些:C# 防止重复标记的正则表达式,c#,regex,C#,Regex,你能帮我找到一个表达方式来接受这些: C1D3 A1Z5R7 H2L7V5X3 A1B2A2 //Because the A repeated 2 times C4F5F3 C2C1 B1B2F6 但不接受这些: C1D3 A1Z5R7 H2L7V5X3 A1B2A2 //Because the A repeated 2 times C4F5F3 C2C1 B1B2F6 我正试图创建一个表达式,以便在C#.Net中使用它在此类问题中返回引用是您的朋友 因此,()..\1将匹配一个字符,后
C1D3
A1Z5R7
H2L7V5X3
A1B2A2 //Because the A repeated 2 times
C4F5F3
C2C1
B1B2F6
但不接受这些:
C1D3
A1Z5R7
H2L7V5X3
A1B2A2 //Because the A repeated 2 times
C4F5F3
C2C1
B1B2F6
我正试图创建一个表达式,以便在C#.Net中使用它在此类问题中返回引用是您的朋友
因此,
()..\1
将匹配一个字符,后面跟任何字符,后面跟第一个捕获组匹配的任何字符在这种问题中,返回引用是您的朋友
string pattern=@"\w+";
var uniqueCharWords=Regex.Matches(input,pattern)
.Cast<Match>()
.Where(x=>x.Value.Distinct()==x.Value.Length);
因此,
(。。.*\1
将匹配一个字符,后跟任何内容,后跟第一个捕获组匹配的内容您可以在不使用正则表达式的情况下执行此操作:
string pattern=@"\w+";
var uniqueCharWords=Regex.Matches(input,pattern)
.Cast<Match>()
.Where(x=>x.Value.Distinct()==x.Value.Length);
StringReader reader = new StringReader(str);
string line;
while((line = reader.ReadLine()) != null)
{
if (line.Distinct().Count() != line.Length)
return false;
}
return true;
您可以在不使用正则表达式的情况下执行此操作:
StringReader reader = new StringReader(str);
string line;
while((line = reader.ReadLine()) != null)
{
if (line.Distinct().Count() != line.Length)
return false;
}
return true;
假设你有一堆大写字母/数字对
/^(([A-Z])(?!.*\2)[0-9])+$/g
崩溃
或者,对于所有令牌,为了避免重复,请平等地。。。
假设你有一堆大写字母/数字对
/^(([A-Z])(?!.*\2)[0-9])+$/g
崩溃
或者,对于所有令牌,为了避免重复,请平等地。。。
您可以使用此基于负前瞻的rgex来避免匹配重复的包含字符串:
/^(?:(.)(?!.*?\1))+$/
/^(?:(.)(?!.*?\1))+$/.test('A1B2D3'); // true
/^(?:(.)(?!.*?\1))+$/.test('A1B2A3'); // false
您可以使用此基于负前瞻的rgex来避免匹配重复的包含字符串:
/^(?:(.)(?!.*?\1))+$/
/^(?:(.)(?!.*?\1))+$/.test('A1B2D3'); // true
/^(?:(.)(?!.*?\1))+$/.test('A1B2A3'); // false
要解决这个问题,您需要单步遍历令牌的每个字符;记录你所看到的。如果您遇到以前见过的东西(它是重复的),请停止并拒绝该令牌。如果有相同的数字,该模式是否会失败?要解决此问题,您需要逐步检查令牌的每个字符;记录你所看到的。如果您遇到以前见过的东西(它是重复的),请停止并拒绝该标记。如果有相同的数字,该模式是否会失败?对于
C1D1
,这会失败,但C1D1应该不会失败?我相信它只适用于相同的字母。(但我不确定,我会问。)在这种情况下,点可以被[a-z]
替换,这在C1D1
中失败,但C1D1应该失败,对吗?我相信它只适用于相同的字母。(但我不确定,我会问。)在这种情况下,圆点可以被[a-z]
替换,这与C1D1
不符,我认为问题中不清楚,数字是否与字母一样被视为代币-这就是为什么我提供了替代正则表达式来避免数字的重复。对于C1D1
,这是失败的,我认为这个问题并不清楚,数字是否与字母一样被视为代币——这就是为什么我提供了替代正则表达式来避免数字的重复。