C#正则表达式使用其内容替换文本

时间:2012-04-14 12:02:33

标签: c# regex

我有文字

<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解析(出于某种原因)。

3 个答案:

答案 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");