我有以下文字:
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
引用文献
关于java - 捕获文本,包括字符串中的标签,然后用文本重新排序标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3064829/