我有一句话是这样的My name is [name] and I'm [age] years old
我想把方括号里的文字替换成字典里的内容。我在谷歌上搜索了一下,发现了Regex.Replace函数,所以我最终得到了以下代码:
string sentence = "My name is [name] and I'm [age] years old"
string someVariable1 = "John";
string someVariable2 = "34";
var replacements = new Dictionary<string, string>()
{
{"[name]", someVariable1},
{"[age]", someVariable2},
};
var replaced = Regex.Replace(sentence, string.Join("|", replacements.Keys.Select(k => Regex.Escape(k.ToString()))), m => replacements[m.Value]);
字符串
问题是,这个句子应该是一个用户输入,我要求在方括号内输入内容,以便检索一些变量。这就是我关心的开始,有没有一种方法可以让方括号内的文本不区分大小写?我的意思是,有没有一种方法,即使有人键入“[NAME]”或“[Name]”而不是“[name]”,它也能完成这项工作?我尝试过使用正则表达式语法,如@"[[Nn]ame]”和Regex.Options.IgnoreCase,但我不能使其工作。我想这是我没有正确理解的事情。
- 谢谢-谢谢
3条答案
按热度按时间zynd9foi1#
看起来你只需要在字典中添加一个不区分大小写的比较器。显然,您还需要应用
RegexOptions.IgnoreCase
,以便Regex finder 在忽略大小写的情况下进行搜索。字符串
dotnetfiddle
e3bfsja22#
对于您的场景,应用
RegexOptions.IgnoreCase
将忽略用户输入中 * 占位符 * 的大小写敏感。如果您的占位符是
replacements
字典中的键,它被初始化为小写,您可以将m.Value
设置为小写。字符串
你也可以迭代
replacements
字典中的每个键值对,如果正则表达式匹配,则替换。型
u0sqgete3#
如果你想忽略大小写,只需要让.Net知道:
字符串
Fiddle
我改变了这里的逻辑:而不是建立一个长模式,我正在寻找 any
[key]
匹配,其中key
可以是任何不包含[
和]
字符的字符串,并在字典中查找替换。模式
\[[^\]\[]+\]
解释:型