Skip to main content
 首页 » 编程设计

c#之是否可以存储正则表达式匹配并将其部分用作列表枚举器

2024年01月26日29emanlee

我创建了一个 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); 

请注意,您不能混合搭配这两种方法。