Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.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# - Fatal编程技术网

C# 检查字符串是否包含特定的字符集?(可能需要重复的字符)

C# 检查字符串是否包含特定的字符集?(可能需要重复的字符),c#,C#,我知道有很多方法可以检查字符串是否包含某些字符,但我正试图找出一种排除重复字母的方法 var expression = new Regex(@"(?<letter>\w).*\k<letter>"); if (expression.IsMatch(userInput)) { Console.WriteLine("Found a duplicate letter: {0}", expression.Match(userInput).Groups["letter"]

我知道有很多方法可以检查字符串是否包含某些字符,但我正试图找出一种排除重复字母的方法

var expression = new Regex(@"(?<letter>\w).*\k<letter>");
if (expression.IsMatch(userInput)) {
    Console.WriteLine("Found a duplicate letter: {0}",  expression.Match(userInput).Groups["letter"].Value);
}
例如,我们有用户输入的字符串doaurid随机字母 然后他们输入单词dad看看它是否有效

我想不出一个简单的解决方案来检查这个字符串是否有2个D和1个a。 我想到的唯一方法是使用嵌套for循环,遍历char数组中的每一个元素,并将使用过的字母转换为1或其他什么。Reed Copsey的方法是正确的。无论如何,LINQ还有另一种选择:

Reed Copsey的观点是正确的。无论如何,LINQ还有另一种选择:

您可以使用:

var userInput = "doaurid";
var toCheck = "dad";

var check = toCheck.GroupBy(c=> c).ToDictionary(g => g.Key, g => g.Count());
var input = userInput.GroupBy(c=> c).ToDictionary(g => g.Key, g => g.Count());

bool validMatch = check.All(g => input.ContainsKey(g.Key) && input[g.Key] == g.Value);
仅当userInput字符串包含toCheck中的所有字母,且字母数完全相同时,此选项才有效

如果输入字符串可以允许更多重复的字母,即:如果dddoauriddd应该匹配,则可以通过以下方式进行检查:

bool validMatch = check.All(g => input.ContainsKey(g.Key) && input[g.Key] >= g.Value);
您可以使用:

var userInput = "doaurid";
var toCheck = "dad";

var check = toCheck.GroupBy(c=> c).ToDictionary(g => g.Key, g => g.Count());
var input = userInput.GroupBy(c=> c).ToDictionary(g => g.Key, g => g.Count());

bool validMatch = check.All(g => input.ContainsKey(g.Key) && input[g.Key] == g.Value);
仅当userInput字符串包含toCheck中的所有字母,且字母数完全相同时,此选项才有效

如果输入字符串可以允许更多重复字母,即:如果dddoauridddd应该匹配,则可以通过以下方式进行检查:

bool validMatch = check.All(g => input.ContainsKey(g.Key) && input[g.Key] >= g.Value);

一种可能是使用正则表达式。例如,下面的代码将检测提供的字符串是否包含任何重复的字母

var expression = new Regex(@"(?<letter>\w).*\k<letter>");
if (expression.IsMatch(userInput)) {
    Console.WriteLine("Found a duplicate letter: {0}",  expression.Match(userInput).Groups["letter"].Value);
}
该表达式首先匹配任何单词字符,然后将结果存储在字母组中。然后,它跳过0个或多个其他中间字母,并最终将反向引用与它在字母组中捕获的任何字母进行匹配。如果字符串不包含任何重复的字母,则此正则表达式将不匹配-因此,如果它匹配,则您知道它包含重复的字母,并且通过检查它在字母组中捕获的值,您至少知道其中一个重复的字母


在这种情况下,它将区分大小写。如果希望它不区分大小写,可以将RegexOptions.IgnoreCase参数传递给正则表达式的构造函数。

一种可能性是使用正则表达式。例如,下面的代码将检测提供的字符串是否包含任何重复的字母

var expression = new Regex(@"(?<letter>\w).*\k<letter>");
if (expression.IsMatch(userInput)) {
    Console.WriteLine("Found a duplicate letter: {0}",  expression.Match(userInput).Groups["letter"].Value);
}
该表达式首先匹配任何单词字符,然后将结果存储在字母组中。然后,它跳过0个或多个其他中间字母,并最终将反向引用与它在字母组中捕获的任何字母进行匹配。如果字符串不包含任何重复的字母,则此正则表达式将不匹配-因此,如果它匹配,则您知道它包含重复的字母,并且通过检查它在字母组中捕获的值,您至少知道其中一个重复的字母

在这种情况下,它将区分大小写。如果希望它不区分大小写,可以将RegexOptions.IgnoreCase参数传递给正则表达式的构造函数。

另一种方法,使用ToLookup:

另一种方法,使用ToLookup:


我可以想出这样一个更简单的解决办法

var userInput = "dddoauriddd"; //"doaurid";
var toCheck = "dad";
var toCheckR = "";
foreach(var c in toCheck)
{
    toCheckR += ".*";
}
Console.WriteLine(Regex.IsMatch(userInput, toCheckR));

我可以想出这样一个更简单的解决办法

var userInput = "dddoauriddd"; //"doaurid";
var toCheck = "dad";
var toCheckR = "";
foreach(var c in toCheck)
{
    toCheckR += ".*";
}
Console.WriteLine(Regex.IsMatch(userInput, toCheckR));

@ReedCopsey right:/我看不到大局。我马上就修好。@ReedCopsey这一个还好吧?我认为它应该像您的第一个解决方案一样工作。是的,但如果ddoaurid是匹配的,它将无法处理。@ReedCopsey right:/我看不到全局。我将在一分钟内修复它。@ReedCopsey这一个可以吗?我认为它应该像您的第一个解决方案一样工作。是的,但如果ddoaurid是匹配的,它将无法处理。我不明白我正在试图找出一种排除重复字母的方法。您想检查较大的字符串是否包含与其他字符串计数相同的所有字母,或者您想实现什么?我不明白,我正在试图找出排除重复字母的方法。您想检查较大的字符串是否包含与其他字符串计数相同的所有字母,或者您想实现什么目标?嗯。。如果输入包含三个D,则返回false。不确定这是否是问题所在。@Default不确定-编辑以包括如何使其有效(如果需要)。也不确定:规格有点模糊。但是+1,因为这两种解决方案都包含了Hm。。如果输入包含三个D,则返回false。不确定这是否是问题所在。@Default不确定-编辑以包括如何使其有效(如果需要)。也不确定:规格有点模糊。但是+1,因为这两种解决方案都包括在内