java - 捕获文本,包括字符串中的标签,然后用文本重新排序标签

标签 java regex

我有以下文字:

abcabcabcabc<2007-01-12><name1><2007-01-12>abcabcabcabc<name2><2007-01-11>abcabcabcabc<name3><2007-02-12>abcabcabcabc<name4>abcabcabcabc<2007-03-12><name5><date>abcabcabcabc<name6>

我需要使用正则表达式来清理上面的文本:

基本的提取规则是:

<2007-01-12>abcabcabcabc<name2>

我提取这个模式没有问题。我的问题是,在文本中我有格式错误的序列:如果文本不以日期开头,以名称结尾,我的提取将失败。例如,上面的文本可能有几个格式错误的序列,例如:

abcabcabcabc<2007-01-12><name1>

应该是:

<2007-01-12>abcabcabcabc<name1>

在提取我的一致模式之前,是否可以有一个正则表达式来清理上面的内容。简而言之,我需要找到所有格式错误的模式,然后取出日期标签并将其放在它的前面,如上面的示例所示。

谢谢。

最佳答案

您可能需要这样的东西吗?

public class Extract {
    public static void main(String[] args) {
        String text =
            "abcabcabcabc<2007-01-12><name1>" +
            "<2007-01-12>abcabcabcxxx<name2>" +
            "<2007-01-11>abcabcabcyyy<name3>" +
            "<2007-02-12>abcabcabczzz<name4>" +
            "abcabcabc123<2007-03-12><name5>" +
            "<date>abcabcabc456<name6>";
        System.out.println(
            text.replaceAll(
                "(text)<(text)>(text)<(text)>"
                    .replace("text", "[^<]*"),
                "$1$3 - $2 - $4\n"
            )
        );
    }
}

打印:

abcabcabcabc - 2007-01-12 - name1
abcabcabcxxx - 2007-01-12 - name2
abcabcabcyyy - 2007-01-11 - name3
abcabcabczzz - 2007-02-12 - name4
abcabcabc123 - 2007-03-12 - name5
abcabcabc456 - date - name6

本质上,有 3 个部分:

  • 裸文本由 \1\3 捕获 - 其中一个应该是空字符串
  • 日期为\2
  • 名称为\4

您当然可以使用 Matcher 并提取单独的 group

引用文献

关于java - 捕获文本,包括字符串中的标签,然后用文本重新排序标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3064829/

相关文章:

javascript - 正则表达式用逗号分隔千位并保留两位小数

regex - PowerShell RegEx 拆分 MAC 地址

java - 正则表达式修改动态 src 属性

javascript - 将 Unicode "name"与 JavaScript 正则表达式匹配

php - CakePHP 验证正则表达式

java - '.' 何时在正则表达式中不匹配?

java - 设置 Vaadin 图表中的标题样式

java - 开发使用安全 METRO 2.1 Web 服务的 .NET 客户端

java - 在 PDF 中插入/更新 XMP?

java - 从文件中读取 int[][]。 java