假设我有一个正则表达式模式,我想用其他东西替换模式的匹配项。在当前模式中,有两个组将匹配,每个组都有编号($1 和 $2):
Regex pattern = new Regex(@"\[([a-zA-Z0-9_\-]+)\^=([^\]]+)\]");
string replacement = "[starts-with(@$1,$2)]";
示例 CSS 选择器:
[id^="blah"]
预期输出:
[start-swith(@ID,"blah")] // Note ID is capitalized
这是另一个正则表达式模式:
Regex pattern = new Regex(@"\[([a-zA-Z0-9_\-]+)\*=([^\]]+)\]");
string replacement = "[contains(@$1,$2)]");
当我执行替换时,有什么方法可以将组 $1 中的匹配大写?
注意:我有许多模式被添加到列表中,并且它们与替换字符串配对,因此我必须使解决方案适用于所有需要将某些匹配组大写的替换。
更新
我想我只是想到了一个可能的解决方案:将替换字符串转换为 aMatchEvaluator
并在需要时返回大写的组匹配项。我认为这可能有效:
Regex pattern = new Regex(@"\[([a-zA-Z0-9_\-]+)\^=([^\]]+)\]");
MatchEvaluator evaluator = new MatchEvaluator((Match m) =>
{
return string.Format("[starts-with(@{0},{1})]", m.Groups[1].Value.ToUpper(), m.Groups[2].Value);
});
如果有人能想到更好的解决方案,请告诉我。非常感激!