0

我有文字

<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 match text

但我无法理解解决方案的正则表达式

有人可以用正则表达式帮助我吗?

Xml 解析应该是最好的解决方案,但我无法使用 xml 解析(出于某种原因)。

4

3 回答 3

2

如果您只想更改每个value属性的内容,那么我只需使用
(<column[^>]* value=')([^']+)('[^>]*>)as 模式并将其替换为$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>元素)

于 2012-04-14T12:53:58.040 回答
0

您不会说输入值是否始终相同(即,如果始终为-0.16666666699999999)。如果它总是相同,那么你甚至不需要正则表达式。

s = s.Replace("-0.16666666699999999", "-0.73783");
于 2012-04-15T02:02:43.527 回答
0

尝试匹配类似的东西 (<column((\s+[\-A-Za-z0-9]+=('[^']*')|("[^"]*"))*)\s+value=)(('[^']*')|("[^"]*"))((\s+[\-A-Za-z0-9]+=('[^']*')|("[^"]*"))*\s*>)并替换为$1'-0.73783'$9

如果他们愿意,其他人可以清理它,如果您确定 stuff 属性顺序并且您的所有属性值都包含在 ' 而不是 " 或可能的混合中,您可以简化它。您可能必须进一步复杂化它以指定表达式中的列名。

于 2012-04-14T12:35:03.010 回答