Java 使用正则表达式提取标记和标记之间的文本
我正在尝试使用正则表达式提取XML标记和标记中的文本。我知道使用正则表达式不是最好的选择。我的内联文本文件中只有很少的标记,因此没有选择XML解析器Java 使用正则表达式提取标记和标记之间的文本,java,regex,xml,Java,Regex,Xml,我正在尝试使用正则表达式提取XML标记和标记中的文本。我知道使用正则表达式不是最好的选择。我的内联文本文件中只有很少的标记,因此没有选择XML解析器 String txt="American Airlines made <TRIPS> 100 </TRIPS> flights in <DATE> December </DATE> over <ROUTE> Altantic </ROUTE> "; String re1=
String txt="American Airlines made <TRIPS> 100 </TRIPS> flights in <DATE> December </DATE> over <ROUTE> Altantic </ROUTE> ";
String re1="<([^>]+)>"; // Tag 1
String re2="([^<]*)"; // Variable Name 1
String re3="</([^>]+)>"; // Tag 2
// String re3 = re1;
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);
System.out.println(tag1.toString());
System.out.println(var1.toString());
}
期望输出
TRIPS
100
DATE
December
ROUTE
Altantic
请更改为while:
String txt = "American Airlines made <TRIPS> 100 <TRIPS> flights in <DATE> December </DATE> over <ROUTE> Altantic </ROUTE> ";
String re1 = "<([^>]+)>"; // Tag 1
String re2 = "([^<]*)"; // Variable Name 1
// String re3="</([^>]+)>"; // Tag 2
String re3 = re1;
Pattern p = Pattern.compile(re1 + re2 + re3, Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
Matcher m = p.matcher(txt);
while (m.find()) {
String tag1 = m.group(1);
String var1 = m.group(2);
System.out.println(tag1.toString());
System.out.println(var1.toString());
}
String txt=“美国航空公司12月份在Altantic上空进行了100次航班”;
字符串re1=“]+)>”;//标签1
字符串re2=“([^”;//标记2
字符串re3=re1;
Pattern p=Pattern.compile(re1+re2+re3,Pattern.CASE|u不区分| Pattern.DOTALL);
匹配器m=p.Matcher(txt);
while(m.find()){
字符串tag1=m.group(1);
字符串var1=m.group(2);
System.out.println(tag1.toString());
System.out.println(var1.toString());
}
如果你来这篇文章是想寻找一种解析XML的方法,不要读这篇文章,而是使用XML解析器
解决方案: 将if(m.find())更改为
while(m.find())
。您可以迭代查找所有匹配项
这是查找所有正则表达式匹配项的一般情况:
Pattern p = Pattern.compile(regex,flags);
Matcher m = p.matcher(text);
while (m.find())
{
System.out.println("First group: " + m.group(1) +
"\nSecond group: " + m.group(2) );
}
使用并提取第二组。将
if(m.find())
更改为while(m.find())
像100
一样正确关闭TRIPS元素,并使用注释掉的re3版本。否则,您将无法匹配正确关闭的其他元素。(小马托尼)我希望你能意识到你在做什么。你正在编写一个应用程序,如果它是以一种非常特殊的方式编写的,那么它只会处理XML。因此,人们会问你如何用这种非常特殊的词汇形式生成XML,你将成为一打这样的问题的原因,因为消费应用程序只有用这种方式编写才能工作当然,标准是有原因的,这种滥用标准的行为会导致行业内的每个人都要承担更高的成本。
Pattern p = Pattern.compile(regex,flags);
Matcher m = p.matcher(text);
while (m.find())
{
System.out.println("First group: " + m.group(1) +
"\nSecond group: " + m.group(2) );
}