编辑: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,我会遇到所有“不要做”的问题。我已经读过其他帖子了。我正在寻找特定黑客的具体帮助。
答案 0 :(得分:5)
不要使用正则表达式来修复/解析/处理标记语言。 Read here why.
使用像tidy这样宽容的解析器,只需几个简单的步骤即可阅读和修复文档。您可以使用Java library (jtidy)。
答案 1 :(得分:2)
好的,鉴于你的约束,你可以:
搜索
<tag attr1\s*=\s*([^" >]+)
并替换为
<tag attr1 = "\1"
所以,在Java中,可能是(根据RegexBuddy):
String resultString = subjectString.replaceAll("<tag attr1\\s*=\\s*([^\" >]+)", "<tag attr1 = \"$1\"");
编辑:简化正则表达式。