我正在尝试将以下字符串中的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}}替换
答案 0 :(得分:0)
使用[^\"]*
或.*?
代替.*
,并将\b
添加到正则表达式的开头。
\b
匹配单词边界,例如。 ValueBinding
之前的空格。
[^\"]*
将匹配除"
之外的所有字符,.*?
将匹配所有非贪婪的字符。
在你的情况下:
patch = Regex.Replace(patch, "\\bValueBinding=" + "\".*?,813", "ValueBinding=" + "\"" + primaryObjectReference + ",813");
答案 1 :(得分:0)
这听起来很合乎逻辑,因为在你的表达中你有“。,813”,这也将是111,813和222,813。如果我理解得很清楚,你必须用“。* 111,813 \?”替换“。,813”。