我有以下文字: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
。参考文献
regular-expressions.info/Grouping