Regex.Replace替换字符串中的子字符串

时间:2013-12-30 12:49:41

标签: c#

我正在尝试将以下字符串中的ValueBinding =“metasys-value:111,813?”替换为

Canvas.Top="494" Width="75" Height="75" jcge:RubberBand.ID="ce4f76db-9efc-4b5d-b48b-b62f727d53ef"  ValueBinding="meta-value:111,813?analogCommand=37&enumCommand=37" AlarmBinding="meta-item:Alarm%20-%20Present%20Value" TrendBinding="meta-item:Trend%20-%20Present%20Value"  SecondaryValueBinding="meta-value:222,813?analogCommand=10&enumCommand=44" SecondaryTrendBinding="meta-item:Trend%20-%20Present%20Value" SensorType="Bulb"

通过使用

的新字符串
patch = Regex.Replace(patch, "ValueBinding=" + "\".*,813", "ValueBinding=" + "\"" + primaryObjectReference + ",813");

但它取代字符串直到第二次,813次出现。如何仅使用新值<{1}}替换

2 个答案:

答案 0 :(得分:0)

使用[^\"]*.*?代替.*,并将\b添加到正则表达式的开头。

\b匹配单词边界,例如。 ValueBinding之前的空格。

[^\"]*将匹配除"之外的所有字符,.*?将匹配所有非贪婪的字符。

在你的情况下:

patch = Regex.Replace(patch, "\\bValueBinding=" + "\".*?,813", "ValueBinding=" + "\"" + primaryObjectReference + ",813");

答案 1 :(得分:0)

这听起来很合乎逻辑,因为在你的表达中你有“。,813”,这也将是111,813和222,813。如果我理解得很清楚,你必须用“。* 111,813 \?”替换“。,813”。