Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.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#,假设我们有字符串: Hello 用户输入一个字符输入“e” 使用正则表达式方法返回以下字符串的正确方法是什么: -e--- 已尝试的代码: public static string updatedWord(char guess, string word) { string result = Regex.Replace(word, guess, "-"); console.writeline(result); retu

假设我们有字符串:

Hello
用户输入一个字符输入“e”

使用正则表达式方法返回以下字符串的正确方法是什么:

-e---
已尝试的代码:

public static string updatedWord(char guess, string word)
    {
        string result = Regex.Replace(word, guess, "-");
        console.writeline(result);
        return result;
    }

假设输入是
e
,则可以构建以下正则表达式模式:

[^e]
然后,在此模式上进行全局替换,该模式匹配不是
e
的任何单个字符,并将其替换为单个破折号

string word=“Hello”;
字符猜测='e';
字符串regex=“[^”+猜测+”];
字符串结果=Regex.Replace(单词,Regex,“-”;
控制台写入线(结果);
这张照片是:

-e---
注意,为了确保正确处理regex元字符,如果允许它们作为输入,我们可以将上面的regex模式包装在
regex.Escape
中:

Regex.Escape(Regex)

这可以在没有正则表达式的情况下完成,您需要“循环”秘密单词的所有字符,并用
-
替换尚未猜测的字符,正则表达式也将循环字母,但c方法更容易理解;)
你需要收集已经猜到的字母

public class Guess
{
    private readonly string _word;
    private readonly HashSet<char> _guessed;

    public Guess(string word)
    {
        _word = word;
        _guessed = new HashSet<char>();
    }

    public string Try(char letter)
    {
        _guessed.Add(letter);

        var maskedLetters = _word.Select(c => _guessed.Contains(c) ? c : '-').ToArray();
        return new string(maskedLetters);
    }
}

你不需要正则表达式。只需保留一个已猜测字母的数组/列表,并使用string.Replace()执行for循环,我很欣赏其他方法。一切都有助于我学习。我选择了regex,因为它与我制作“词典列表”的方式配合使用
var game = new Guess("Hello");

var result = game.Try('e');

Console.WriteLine(result); // "-e---"