基于Java正则表达式的字符串替换
在下面的用例中寻找Java中基于正则表达式的字符串替换。 我正在做一些基于Groovy的XML处理,由于一些自定义处理(这里不作详细介绍),生成的XML有一些无效的标记,例如基于Java正则表达式的字符串替换,java,xml,regex,groovy,Java,Xml,Regex,Groovy,在下面的用例中寻找Java中基于正则表达式的字符串替换。 我正在做一些基于Groovy的XML处理,由于一些自定义处理(这里不作详细介绍),生成的XML有一些无效的标记,例如 <?xml version='1.0' encoding='UTF-8'?> <Customer id="xyz" xmlns='http://abc.com'> <order orderGroup="mock"> <entry> <key>
<?xml version='1.0' encoding='UTF-8'?>
<Customer id="xyz" xmlns='http://abc.com'>
<order orderGroup="mock">
<entry>
<key>test</key>
</entry>
</order orderGroup="mock">
</Customer id="xyz">
测试
如果您注意到,包含属性的元素名称的结束标记会弄乱。XML只是作为字符串处理的,所以我想做的是,通过基于字符串正则表达式的替换来替换这些结束标记。例如,更换
</order orderGroup="mock"> with </order>,
</Customer id="xyz"> with </Customer>
with,
具有
你知道有没有基于Java字符串的快速正则表达式可以用来替换吗
谢谢。最简单的解决方案是修复自定义XML处理并使其生成有效的XML 简单的解决方案是使用类似的方法清理XML 如果必须使用正则表达式,可以尝试以下方法:
Pattern pattern = Pattern.compile("</([A-Za-z]+) [^>]+>");
Matcher matcher = pattern.matcher(xml);
if(matcher.find()) {
xml = matcher.replaceAll(matcher.group(1));
}
Pattern=Pattern.compile(“]+>”);
Matcher-Matcher=pattern.Matcher(xml);
if(matcher.find()){
xml=matcher.replaceAll(matcher.group(1));
}
我还没有测试过,所以请记住这一点。可能会有一些问题
正则表达式的解释:
< -> The opening angle bracket of the tag
/ -> The / that marks a closing tag
( -> Start of a capturing group. We want to capture the actual ending tag.
[A-Za-z]+ -> One or more alphabetic characters (upper and lowercase)
) -> End of the capturing group.
-> A space.
[^>]+ -> One or more of anything that is not a closing angle-bracket.
> -> The closing angle bracket of the tag.
<->标签的开口角支架
/->标记结束标记的/符号
(->捕获组的开始。我们要捕获实际的结束标记。
[A-Za-z]+->一个或多个字母字符(大写和小写)
)->捕获组结束。
->空间。
[^>]+->一个或多个非闭合角括号的内容。
>->标签的闭合角支架。
最简单的解决方案是修复自定义XML处理并使其生成有效的XML
简单的解决方案是使用类似的方法清理XML
如果必须使用正则表达式,可以尝试以下方法:
Pattern pattern = Pattern.compile("</([A-Za-z]+) [^>]+>");
Matcher matcher = pattern.matcher(xml);
if(matcher.find()) {
xml = matcher.replaceAll(matcher.group(1));
}
Pattern=Pattern.compile(“]+>”);
Matcher-Matcher=pattern.Matcher(xml);
if(matcher.find()){
xml=matcher.replaceAll(matcher.group(1));
}
我还没有测试过,所以请记住这一点。可能会有一些问题
正则表达式的解释:
< -> The opening angle bracket of the tag
/ -> The / that marks a closing tag
( -> Start of a capturing group. We want to capture the actual ending tag.
[A-Za-z]+ -> One or more alphabetic characters (upper and lowercase)
) -> End of the capturing group.
-> A space.
[^>]+ -> One or more of anything that is not a closing angle-bracket.
> -> The closing angle bracket of the tag.
<->标签的开口角支架
/->标记结束标记的/符号
(->捕获组的开始。我们要捕获实际的结束标记。
[A-Za-z]+->一个或多个字母字符(大写和小写)
)->捕获组结束。
->空间。
[^>]+->一个或多个非闭合角括号的内容。
>->标签的闭合角支架。
试试看
xml=xml.replaceAll(“]+).*?>”,“”);
试试看
xml=xml.replaceAll(“]+).*?>”,“”);
加载javadoc、按Ctrl-F并键入“regex”时会发生什么?为什么不修复产生垃圾的错误“自定义处理”,而不是尝试解决这个问题呢?当加载javadoc,点击Ctrl-F并键入“regex”时会发生什么?为什么不修复产生垃圾的错误“自定义处理”,而不是尝试解决这个问题呢?谢谢Vivin!这在一定程度上是可行的。唯一的问题是,它甚至替换了开始和结束的尖括号。换言之,它会导致客户,而不是如图所示,这个解决方案比它需要的要详细得多。特别是,在进行替换之前,无需调用find()
replaceAll()
本身会执行此操作,如果没有匹配项,则返回原始字符串,保持不变。您也不需要为替换字符串调用group(n)
之类的方法。如果字符串中出现任何问号或反斜杠,您将得到一个运行时异常;如果你使用“$1”
,这不是问题。是的,他的答案好多了。谢谢Vivin!这在一定程度上是可行的。唯一的问题是,它甚至替换了开始和结束的尖括号。换言之,它会导致客户,而不是如图所示,这个解决方案比它需要的要详细得多。特别是,在进行替换之前,无需调用find()
replaceAll()
本身会执行此操作,如果没有匹配项,则返回原始字符串,保持不变。您也不需要为替换字符串调用group(n)
之类的方法。如果字符串中出现任何问号或反斜杠,您将得到一个运行时异常;如果你使用“$1”
,这不是问题。是的,他的答案要好得多。+1,但我会使用]+)[^>]+>
*?
是个善变的朋友;既然你可以很容易地说出你想要的,为什么还要听天由命呢?我同意\\s,但似乎正则表达式将“-->”转换为+1,但我会使用]+)[^>]+>
*?
是个善变的朋友;既然你可以很容易地说出你想要的,为什么还要听天由命呢?我同意\\s的说法,但似乎正则表达式转换为“->”