我有这样一句话
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,但我无法使其工作。我想这是我理解不正确的地方。
谢谢你。
似乎您只需要在字典中添加一个不区分大小写的比较器即可。显然,您还需要应用
RegexOptions.IgnoreCase
以便正则表达式 finder 在忽略大小写的情况下进行搜索。
var replacements = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
{
{"[name]", someVariable1},
{"[age]", someVariable2},
};
对于您的场景,应用
RegexOptions.IgnoreCase
将忽略用户输入中 占位符 的区分大小写。
如果您的占位符(即
replacements
字典中的键)初始化为小写,则可以将 m.Value
设置为小写。
replaced = Regex.Replace(sentence, string.Join("|", replacements.Keys.Select(k => Regex.Escape(k.ToString()))), m => replacements[m.Value.ToLower()], RegexOptions.IgnoreCase);
您还可以迭代
replacements
字典中的每个键值对,并在正则表达式匹配时进行替换。
string replaced = sentence;
foreach (var kvp in replacements)
{
var regex = new Regex(Regex.Escape(kvp.Key), RegexOptions.IgnoreCase);
if (regex.IsMatch(replaced))
{
replaced = regex.Replace(replaced, replacements[kvp.Key]);
}
}
如果你想忽略大小写,只需让.Net知道即可:
string sentence = "My name is [name] and I'm [age] years old";
string someVariable1 = "John";
string someVariable2 = "34";
// When looking for a key, ignore case
var replacements = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
{
{"[name]", someVariable1},
{"[age]", someVariable2},
};
// Pattern doesn't have letters, so no case policy required
var resplace = Regex.Replace(
sentence,
@"\[[^\]\[]+\]",
m => replacements.TryGetValue(m.Value, out string s) ? s : m.Value);
我在这里改变了逻辑:我不是构建一个长模式,而是寻找 any
[key]
匹配,其中 key
可以是不包含 [
和 ]
字符的任何字符串,然后查看在字典中查找替换。
图案
\[[^\]\[]+\]
解释:
\[ - [ character
[^\]\[]+ - one or more characters except ']' or '['
\] - ] character