c# - 是否可以存储正则表达式匹配并将其中的一部分用作列表枚举器?
问题描述
我创建了一个 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);
Note that you can't mix and match the two approaches.
推荐阅读
- r - 在 Shiny Dashboard 中将 SWMM 输出作为二进制文件打开
- object-detection - 用pycocotools发现两盒为一盒时AP如何计算?
- laravel - 使用 GetStream laravel 插件删除流提要
- java - 为什么 com.google.gson.Gson::toJson 返回一个空对象?
- google-sheets - 如何从范围中获取名称和前 N 个值
- apache-spark - 如何使用 KubernetesPodOperator 编写 Airflow DAG 提交 Spark 作业
- python-3.x - 将数组转换为列表
- api - 如何以编程方式下载美国银行交易?
- abap - 如何在发货日期前 14 天获得到期日?
- php - Twilio Connect:取消授权 URL