代码之家  ›  专栏  ›  技术社区  ›  Instantsoup

用于引用未加引号的XML属性的regex

  •  2
  • Instantsoup  · 技术社区  · 16 年前

    编辑:100%正确的理论是你根本不想这样做。然而,我接受了帮助最大的答案。

    所以我收到了一个客户机发出的难看的XML,该客户机承诺要修复它。同时我需要自己清理。我在找一个在Java中使用的正则表达式来添加非引用属性的引号。一般情况下更好,但到目前为止,只有一个属性被破坏,所以regex可以专门引用“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的,在这里我将遇到所有“不要做它”的问题。我读过其他的文章。我正在为一个特定的黑客寻找特定的帮助。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Tim Pietzcker    16 年前

    好吧,考虑到你的限制,你可以:

    寻找

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

    替换为

    <tag attr1 = "\1"
    

    因此,在Java中,这可能是(根据 RegexBuddy ):

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

    编辑:简化正则表达式多一点。

        2
  •  5
  •   Community Mohan Dere    9 年前

    不要使用regex来修复/分析/处理标记语言。 Read here why.

    使用一个宽容的解析器 tidy 通过几个简单的步骤阅读和修复文档。有一个 Java library (jtidy) 你可以使用。