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---"