假设我有一个带有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>",但是我被困在这里。

我要替换字符,因为在这些字符中有“&”,“>”,“

最佳答案

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

在搜索Group 1上,您将获得TAG;在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 </>

10-05 23:05