我正在尝试替换所有字符串实例,例如
PageLocalize("Texts", "R73")
类似
Texts.R73.Localise()
我有匹配这些字符串的正则表达式:
PageLocalize\("([A-Za-z]+)", "([A-Za-z0-9]{0,6})"\)
替换字符串:
$1.$2.Localise()
但是The Regex Coach说我的替换结果是
$1.$2.Localise()
我需要对正则表达式做些什么才能使编号分组正常工作?
答案 0 :(得分:2)
它在测试应用程序中运行良好:
var r = new Regex(
"PageLocalize\\(\"([A-Za-z]+)\", \"([A-Za-z0-9]{0,6})\"\\)");
var s = r.Replace("PageLocalize(\"Texts\", \"R73\")", "$1.$2.Localise()");
Console.WriteLine(s);
这导致:
Texts.R73.Localise()
AmitK在Regex Coach中找到了正确的方法,它使用\ 1代替$ 1。事实证明RegexCoach不是.NET应用程序,所以它不使用.NET正则表达式!
另外,你知道named groups吗?它们更易于维护,尤其是在向正则表达式添加新组时。无法让Stackoverflow显示没有空格的命名组正则表达式,所以这里有空格:
(?< group_name> yourregex)
在替换文字中:
${group_name}
答案 1 :(得分:2)
我没有使用过RegexCoach,但是一些Regex引擎要求你用反斜杠指定反向引用,如下所示:
\1.\2.Localise()
只有在$ 1不被视为对第1组的反向引用时,才能获得您获得的结果。
修改强>
我刚检查过,RegexCoach似乎使用了Perl Regex语法。如果是这样,那么$1
将是对组1的有效反向引用。那么看起来引擎无法匹配组。