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

标签 java 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您将在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将包含你的值(value)。

使用 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 </>

关于Java用另一个正则表达式替换所有出现的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44549207/

相关文章:

java - 为什么我的数组被覆盖了java

java - 使用 CriteriaQuery API 的多态 JPA 查询

python - 如何在python中使用IF语句匹配两个相等的字符串

javascript - 从字符串中提取公司和公司代码

C#正则表达式匹配表情符号

regex - 以自定义格式保存 ldapsearch 的 Bash 脚本

java - Liferay portlet 在 processAction 之后重新呈现初始页面

java - 第一次 myBatis 生成器获得大量 "cannot be resolved to a type"后

java - 从 eclipse-jee-helios 创建 RCP 项目时遇到问题

javascript - 在此正则表达式中允许 aphrerates