我创建了一个 MadLibs 风格的游戏,用户在其中输入对提示的响应,这些响应又替换了故事中由 %s0、%s1 等表示的空白。我使用 for 循环进行此工作,但其他人建议我可以使用正则表达式来完成。到目前为止,我所拥有的如下,它将 %s+number 的所有实例替换为“wibble”。我想知道的是,是否可以将正则表达式找到的数字存储在一个临时变量中,然后使用它从单词列表中返回一个值?例如。 return Regex.Replace(story, pattern, Global.Words[x]);其中 x是正则表达式模式遍历字符串时返回的数字。
static void Main(string[] args)
{
Globals.Words = new List<string>();
Globals.Words.Add("nathan");
Globals.Words.Add("bob");
var text = "Once upon a time there was a %s0 and it was %s1";
Console.WriteLine(FindEscapeCharacters(text));
}
public static string FindEscapeCharacters(string story)
{
var pattern = @"%s([0-9]+)";
return Regex.Replace(story, "%s([0-9]+)", "wibble");
}
提前致谢,内森。
请您参考如下方法:
不是对你关于正则表达式的问题的直接回答,但如果我理解正确的话,有一种更简单的方法可以做到这一点:
string baseString = "I have a {0} {1} in my {0} {2}.";
List<string> words = new List<string>() { "red", "cat", "hat" };
string outputString = String.Format(baseString, words.ToArray());
outputString 将是 I have a red cat in my red hat.。
这不是您想要的,还是您的问题还有更多我想念的?
细化说明
String.Format 使用以下签名:
string Format(string format, params object[] values)
params 的巧妙之处在于您可以单独列出值:
var a = String.Format("...", valueA, valueB, valueC);
但是你也可以直接传入一个数组:
var a = String.Format("...", valueArray);
请注意,您不能混合搭配这两种方法。
