我正在使用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)
谢谢!
答案 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+)?\"