需要正则表达式(RegEx)来替换XML中的浮点数

时间:2011-08-22 15:40:53

标签: xml regex vb.net

我正在使用Visual Basic 2010 Express编辑XML文件。我想替换具有(通常)非零浮点数和单个零的项目。

开始于:

<Body RelArmLen="1.234" RelLegLen="-9.876" RelWaist="-3.14159">

结束于:

<Body RelArmLen="1.234" RelLegLen="0" RelWaist="-3.14159">

数字可能也可能不以 - (减号)开头,并且在小数的两边可能有任意数字的位数。如果起始值为零,则可能有也可能没有小数(即,它可能是“0”或“0.0”或“0.00”)。没有值有+;缺席 - 意味着积极的。

(我的问题似乎是处理引号;我可以让它匹配从RelLegLen =“到&gt;之前的最后一个引用,或RelLegLen =”本身的所有内容,但不仅仅是引号之间的浮点数属于RelLegLen)

谢谢!

5 个答案:

答案 0 :(得分:1)

你能不能这样做:

RelLegLen="[^"]*"

您似乎想要将RelLegLen中的任何内容更改为0。

答案 1 :(得分:1)

为什么尝试使用正则表达式执行此操作? .Net有一个很棒的XML解析器,可以为你完成这项工作。请查看此页面以获取有关VB中的XML的帮助:http://msdn.microsoft.com/en-us/library/bb918016.aspx

答案 2 :(得分:1)

使用非贪婪匹配:

/RelLegLen="(.*?)"/

这将匹配/RelLegLen="到下一个"。子匹配将包含你的浮动。

答案 3 :(得分:0)

永远不要使用正则表达式来解析XML。决不。你会弄错的。例如,一些提议的“解决方案”将无法匹配使用单引号作为分隔符的属性,但会在匹配文本节点中出现的引用字符串时“成功”。

这是XSLT的理想候选者,尤其是具有正则表达式支持的XSLT 2.0。使用模板规则查找要处理的属性,然后使用XPath 2.0表达式“castable as xs:double”来测试格式是否为浮点。

答案 4 :(得分:0)

主题似乎已经完成,但也许有人发现它有价值,这是我在VS2015中使用的正则表达式,用于查找字符串中的硬编码数字并且运行良好:

\"[-+]?\d+(.\d+)?\"