Regex Java-删除XML属性中的双引号

Regex Java-删除XML属性中的双引号,regex,xml,attributes,java-6,double-quotes,Regex,Xml,Attributes,Java 6,Double Quotes,我有一个通过REST调用获得的xml字符串。但是,某些属性的值已损坏。例如: <property name="foo" value="Some corrupted String because of "something" like that"/> 如何用一个单引号替换前面没有value=或后面没有/>的双引号,并从Java 6中损坏的字符串中获取有效的XML字符串 编辑: 我试图修改这个用于VisualBasic的l

我有一个通过REST调用获得的xml字符串。但是,某些属性的值已损坏。例如:

<property name="foo" value="Some corrupted String because of "something" like that"/>

如何用一个单引号替换前面没有value=或后面没有/>的双引号,并从Java 6中损坏的字符串中获取有效的XML字符串

编辑:

我试图修改这个用于VisualBasic的lookahead/lookbehind正则表达式。但是由于转义字符的不兼容性,我想我无法创建它的Java版本。这是:


(?[^”“]*”[^”“]*)*[^”“]*)(?!\s+\w+=\s*[/?]?“>)(?[^”“]*”[^”“]*)*[^”“]*$)

您可以使用以下正则表达式:

\s+[\w:.-]+="([^"]*(?:"(?!\s+[\w:.-]+="|\s*(?:\/?|\?)>)[^"]*)*)"
看。它将匹配将后者捕获到组1中的任何属性名称/值对,我们可以在回调中更改该组

以下是一份:

String s=“\n”;
StringBuffer结果=新的StringBuffer();
匹配器m=Pattern.compile(“(\\s+[\\w:.-]+=\”([^\“]*(?:\”(?!\\s+[\\w:.-]+=\”\\\s*(?:/?\\?)>)[^\“]*)\”)。匹配器;
while(m.find()){
m、 附录替换(结果,m.group(1)+m.group(2)。替换(“\”,“”)+“\”);
}
m、 附尾(结果);
System.out.println(result.toString());
输出:



请分享您到目前为止所做的尝试。我已经尝试过修改这个用于VisualBasic的先行/后置正则表达式。但是由于转义字符不兼容,我想我无法创建它的Java版本。这里是:
(?[^”“]*”“[^”“]*)*[^”“]*”(?!\s+\w+=\s*[/?”>)(?[^”“]*)*[^]*$)
您最好使用类似的方法,然后替换每个组1中的双引号。看一看。我尝试了您的代码片段。但是,它需要一些修改。REST调用的原始结果如下:
应用您的解决方案后,结果变成:
。e> 但是,xml声明和字符串的第一个属性也被替换为“Ok,使用
(?:\/?\124;\?)
而不是
/?
”。我将作为答案发布。将您的答案转换为C#以供其他人(您的a RegEx主管)使用。
String s =  "<?xml version=\"1.0\" encoding=\"UTF-8\"?> <resources> <resource> <properties> <property name=\"name\" value=\"retrieveFoo\"/>\n<property name=\"foo\" value=\"Some corrupted String because of \"something\" like that\"/>";
StringBuffer result = new StringBuffer();
Matcher m = Pattern.compile("(\\s+[\\w:.-]+=\")([^\"]*(?:\"(?!\\s+[\\w:.-]+=\"|\\s*(?:/?|\\?)>)[^\"]*)*)\"").matcher(s);
while (m.find()) {
    m.appendReplacement(result, m.group(1) + m.group(2).replace("\"", "&quot;") + "\"");
}
m.appendTail(result);
System.out.println(result.toString());