我正在尝试在文本文件中提取标记和文本之间的文本。我试图使用正则表达式实现这一点(没有很多xml标签)。
下面是我到目前为止所尝试的
String txt="<DATE>December</DATE>";
String re1="(<[^>]+>)"; // Tag 1
String re2="(.*?)"; // Variable Name 1
String re3="(<[^>]+>)"; // Tag 2
Pattern p = Pattern.compile(re1+re2+re3,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
Matcher m = p.matcher(txt);
if (m.find())
{
String tag1=m.group(1);
String var1=m.group(2);
String tag2=m.group(3);
//System.out.print("("+tag1.toString()+")"+"("+var1.toString()+")"+"("+tag2.toString()+")"+"\n");
System.out.println(tag1.toString().replaceAll("<>", ""));
System.out.println(var1.toString());
}
作为答案,我得到:
<DATE>
December
如何摆脱<>
?
答案 0 :(得分:2)
答案 1 :(得分:1)
使用正则表达式解析xml是个坏主意。使用正则表达式无法识别从开始标记到结束标记的完整元素(正则表达式不能“记住”多次出现)。
然而,为什么你的正则表达式在这种特殊情况下失败了:
在re1
,re2
,re3
中,您选择要包含<
和>
的捕获组(同样不包括/
在re3
)。你可以简单地改变这个
String re1="<([^>]+)>"; // Tag 1
String re2="([^<]*)"; // Variable Name 1
String re3="</([^>]+)>"; // Tag 2
或使用合适的正则表达式删除<
和>
形式tag1
:
System.out.println(tag1.toString().replaceAll("<|>", ""));
或
System.out.println(tag1.toString().replaceAll("[<>]", ""));