【问题标题】:Regex for quoting unquoted XML attributes用于引用未引用的 XML 属性的正则表达式
【发布时间】:2011-01-15 19:49:31
【问题描述】:

编辑:100% 正确的理论是您根本不想这样做。不过我已经接受了最有帮助的答案。

所以我从一个承诺修复它的客户那里得到了丑陋的 XML。与此同时,我需要自己清理它。我正在寻找一个在 Java 中使用的正则表达式来为未引用的属性添加引号。一般情况更好,但到目前为止只有一个属性被破坏,因此正则表达式可以专门引用“attr1”。该属性的值未知,因此我无法将其包含在搜索中。

<tag attr1 = VARIABLETEXT>
<tag attr1 = "VARIABLETEXT">not quoted</tag>
<tag attr1 = VARIABLETEXT attr2 = "true">
<otherTag>buncha junk</otherTag>
<tag attr1 = "VARIABLETEXT">"quoted"</tag>

应该变成

<tag attr1 = "VARIABLETEXT">
<tag attr1 = "VARIABLETEXT">not quoted</tag>
<tag attr1 = "VARIABLETEXT" attr2 = "true">
<otherTag>buncha junk</otherTag>
<tag attr1 = "VARIABLETEXT">"quoted"</tag>

编辑:非常感谢你告诉我不要做我想做的事。然而,这不是随机的,任何东西都是 XML,在那里我会遇到所有“不要这样做”的问题。我已经阅读了其他线程。我正在寻找针对特定 hack 的特定帮助。

【问题讨论】:

  • vi 文件名.xml; :%s/attr1 = false/attr1 = "false"/g ... 还有 gVim for Windows。
  • 如果它只是暂时的,为什么不使用清理/验证库对其进行预处理?
  • 一个问题:你怎么知道VARIABLETEXTattr2在哪里拆分?是不是下一个属性以attr 开头?还是大写/小写切换?
  • 对不起,蒂姆,VARIABLETEXT 和 attr2 之间应该有一个空格。

标签: java xml regex


【解决方案1】:

不要使用正则表达式来修复/解析/处理标记语言。 Read here why.

使用诸如tidy 之类的宽泛解析器,只需几个简单的步骤即可读取和修复文档。您可以使用Java library (jtidy)

【讨论】:

  • 感谢您提供该线程参考。它让生活变得有价值。
  • 是的,我读过。任何人都可以在不讲道的情况下帮助我使用正则表达式吗?
  • 不,对不起。因为没有办法让它 100% 正确,所以总会有一些奇怪的极端情况。为什么不使用解析器?
  • 我会满足于 89% 的权利。感谢解析器的想法。这不是一个选择。我只是现在没有时间去做,这就是我来这里寻求正则表达式帮助的原因。
  • 如果你建议使用 tidy,你应该建议可以让 OP 实现他想要的配置选项
【解决方案2】:

好的,鉴于您的限制,您可以:

搜索

<tag attr1\s*=\s*([^" >]+)

替换为

<tag attr1 = "\1"

所以,在 Java 中,这可能是(根据 RegexBuddy):

String resultString = subjectString.replaceAll("<tag attr1\\s*=\\s*([^\" >]+)", "<tag attr1 = \"$1\"");

编辑:简化正则表达式。

【讨论】:

  • 对不起,变量text和attr2之间肯定有空格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多