Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 防止重复标记的正则表达式_C#_Regex - Fatal编程技术网

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
,这是失败的,我认为这个问题并不清楚,数字是否与字母一样被视为代币——这就是为什么我提供了替代正则表达式来避免数字的重复。