【问题标题】:Need Regular Expression (RegEx) to replace floating-point numbers in XML需要正则表达式 (RegEx) 来替换 XML 中的浮点数
【发布时间】:2011-08-22 15:40:53
【问题描述】:

我正在使用 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=" 到 > 之前的最后一个引号或 RelLegLen=" 本身的所有内容,但不仅仅是属于引号之间的浮点数到 RelLegLen)

谢谢!

【问题讨论】:

  • 您应该使用 XML 解析器 (XLINQ)
  • 请记住:如果您遇到问题并尝试使用 Regex 解决它,那么您现在就会遇到问题......复数! -- Scott Hanselman 在他的众多演讲之一中。

标签: xml regex vb.net


【解决方案1】:

你不能这样做吗:

RelLegLen="[^"]*"

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

【讨论】:

  • 工作就像一个魅力,满足我的简单需求。谢谢!
  • 不客气。我通常建议像其他一些用户一样使用 XML 解析器,但有时我也使用这个简单的正则表达式来替换属性值。通常在文本编辑器中。
  • 是的,我今天所需要的只是快速完成这个文件。将来我有更多时间或理由时,我会研究解析器。
【解决方案2】:

为什么要尝试使用正则表达式来做到这一点? .Net 有一个出色的 XML 解析器,可以为您完成这项工作。查看此页面以获取有关 VB 中 XML 的帮助:http://msdn.microsoft.com/en-us/library/bb918016.aspx

【讨论】:

  • 你可能是对的。我正在使用 RegEx,因为我认为这将是一个简单直接的文本搜索和替换,我不妨使用我手头的工具,而不是挖掘新的东西。谢谢!
【解决方案3】:

使用非贪婪匹配:

/RelLegLen="(.*?)"/

这将从/RelLegLen=" 匹配到下一个"。子匹配将包含您的浮点数。

【讨论】:

  • 我得到“未找到搜索文本”。可能是 VB 2010 Express 中 RegEx 的弱实现,或者是我的典型。
【解决方案4】:

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

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

【讨论】:

  • 谢谢!对于更广泛的受众来说,这可能是最好的建议。我最初接受的答案恰好适用于我的情况,因为我正在使用的 XML 文件是允许的所有格式良好的 XML 的一个非常可预测的子集(也就是说,即使允许单引号,我也不会'不希望在这些特定的 XML 文件中看到它)。
  • 我同意 99% 的时间你不应该使用正则表达式来解析 XML,但我不会说你应该永远使用它。上面的 OP 评论就是一个很好的例子。如果您有一致的数据,这是一次性修复,您可以验证您的修改,继续使用正则表达式。
  • 是的 DevNull,我一定会时不时地使用你的推荐用于我的具体用例,非常感谢。
【解决方案5】:

主题似乎已经完成,但也许有人觉得它很有价值,这是我在 VS2015 中使用的正则表达式来查找字符串中的硬编码数字并且效果很好:

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

【讨论】:

    猜你喜欢
    • 2011-05-27
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多