繁体   English   中英

Java用另一个正则表达式替换所有出现的正则表达式

[英]Java replace all occurences of regex with another regex

假设我有一个带有xml的字符串,其中<tagA>很多:

String example = " (...) some xml here (...)
                    <tagA>283940</tagA>
                   (...) some xml here (...)
                    <tagA>& 9940</tagA>
                    <tagA>- 99440</tagA>
                    <tagA>< 99440</tagA>
                    <tagA>99440</tagA>
                   (...) more xml here (...) "

内容应仅包含数字,但有时它具有随机字符,后跟空格和数字。 我想删除不需要的字符和空格。 怎么做?

到目前为止,我知道我应该在寻找正则表达式"<tagA>. [0-9]*<\\/tagA>"但是我被卡在这里。

我想替换字符,因为在这些字符中有“&”,“>”,“ <”符号使xml无效(这使我无法将其视为XML)。

您要查找的正则表达式为: <(\\w+)>(\\D{0,})(\\d+)

在搜索Group 1您将获得TAG;在搜索Group 1 Group 2您将得到您的怪异物品(所有不是数字的东西),在搜索Group 3有数字。

此正则表达式的“增强版本”可能在更多情况下适用: (\\w{0,})(<\\w+>)(\\D{0,})(\\d+)(\\D{0,})(<\\/\\w+>)(\\w{0,})

它将在Group 1放置可能在标记之前的任何空格。 Group 7将处理尾随空白。 Group 2 and 6将匹配开始标签和结束标签。 Group 3 and 5将匹配您在值之间可能具有的任何怪异字符。 Group 4将包含您的价值。

使用String :: replaceAll,您可以通过仅打印第2、4和6组来去除其余部分,从而进行过滤和清理。

//input data
String s = "<tagA>283940</tagA>\n" +
"                    <tagA>& 9940<</tagA>\n" +
"                    <tagA>- 99440</tagA>\n" +
"                    <tagA>< 99440</tagA>\n" +
"                    <tagA>99440</tagA>"
                + "<13243> asdfasdf </>";


    String replaced = s.replaceAll("(\\s{0,})(<\\w+>)(\\D{0,})(\\d+)(\\D{0,})(<\\/\\w+>)(\\s{0,})", "$2$4$6");
    System.out.println(replaced);

输出: <tagA>283940</tagA><tagA>9940</tagA><tagA>99440</tagA><tagA>99440</tagA><tagA>99440</tagA><13243> asdfasdf </>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM