我有文字
<column caption='TZ_Shift' datatype='real' name='[total_millis Parameter]'
param-domain-type='any' role='measure' type='quantitative'
value='-0.16666666699999999'>
也可以像
<column caption='TZ_Shift' value='-0.16666666699999999'>
多次重复,我想替换它的value
部分。
所以我希望结果是这样的
<column caption='TZ_Shift' datatype='real' name='[total_millis Parameter]'
param-domain-type='any' role='measure' type='quantitative'
value='-0.73783'>
和
<column caption='TZ_Shift' value='-0.73783'>
分别是0.73783是新的val
我提到了这个问题c# regex to find and replace reusing part of the matched text
但是我无法理解解决方案的正则表达式
有人可以用正则表达式帮我解决。
Xml解析应该是最好的解决方案,但我无法使用xml解析(出于某种原因)。
答案 0 :(得分:2)
如果您只想更改每个value
属性的内容,那么我只想使用
(<column[^>]* value=')([^']+)('[^>]*>)
作为模式,并将其替换为$1-0.73783$3
。
在C#中,这可以按如下方式完成:
Regex re = new Regex("(<column[^>]* value=')([^']+)('[^>]*>)");
string input = @"<column caption='TZ_Shift' value='-0.16666666699999999'>";
string output = re.Replace(input, "$1-0.73783$3");
(编辑:扩展正则表达式只匹配<column>
元素)
答案 1 :(得分:0)
尝试匹配类似的内容
(<column((\s+[\-A-Za-z0-9]+=('[^']*')|("[^"]*"))*)\s+value=)(('[^']*')|("[^"]*"))((\s+[\-A-Za-z0-9]+=('[^']*')|("[^"]*"))*\s*>)
并替换为$1'-0.73783'$9
如果他们想要的话,其他人可以清理它,如果你确定了东西属性顺序,并且你所有的属性值只是'代替'或者可能的混合,你可以简化它。你可能必须进一步复杂化以指定表达式中的列名。
答案 2 :(得分:0)
您没有说输入值是否始终相同(即,如果它总是-0.16666666699999999)。如果它总是相同,那么你甚至不需要正则表达式。
s = s.Replace("-0.16666666699999999", "-0.73783");