下面我有两个正则表达式对某些文本进行操作:
假设key =“old”和value =“new”
text = Regex.Replace(text,
"\\." + change.Key + ",",
"." + change.Value + ","
);
text = Regex.Replace(text,
"\\." + change.Key + ";",
"." + change.Value + ";"
);
所以,“。old”和“.old;”将分别改为“.new”和“.new;”。
我确信这可以缩短为一个正则表达式。我怎么能这样做,只有当逗号和分号位于变量的末尾时,字符串才会改变?例如,我不希望“.oldQ”更改为“.newQ”。谢谢!
答案 0 :(得分:2)
.NET使用$进行反向引用:
text = Regex.Replace(text,
@"\." + change.Key + "([,;])",
"." + change.Value + "$1");
答案 1 :(得分:0)
出乎我的意料:
text = Regex.Replace(text, @"\.(old|new),",@"\.\1;");
答案 2 :(得分:0)
您只想更改中间部分,所以:
text = Regex.Replace(text,
"\\." + change.Key + "(,|;)^", // mark a group using "()" for substitution...
"." + change.Value + "\1" // use the group ("\1")
);
答案 3 :(得分:0)
我喜欢使用\ b,像这样:
text = Regex.Replace(text, @"\." + change.Key + @"\b", "." + change.Value);
它会匹配关键字后跟其他分隔符,而不仅仅是“,”和“;”,但它可能仍适用于您的情况。