Java中围绕空格的正则表达式
所以我正在用Java1.5做一个项目,将球员数据从NFL的网页移动到个人数据存储中。我将页面的源代码转换为字符串格式,并对其进行解析以获取我想要提取的数据。我能够获得第一块定期格式化的播放器信息,但我正在努力格式化我的模式以适应一些异常结构化的空白。注释从它停止正确解析的位置开始Java中围绕空格的正则表达式,java,html,regex,Java,Html,Regex,所以我正在用Java1.5做一个项目,将球员数据从NFL的网页移动到个人数据存储中。我将页面的源代码转换为字符串格式,并对其进行解析以获取我想要提取的数据。我能够获得第一块定期格式化的播放器信息,但我正在努力格式化我的模式以适应一些异常结构化的空白。注释从它停止正确解析的位置开始 pattern = Pattern.compile( sTag + "(.*?)" + eTag + "\n"//position 1-group
pattern = Pattern.compile(
sTag + "(.*?)" + eTag + "\n"//position 1-group
+sTag + "(.*?)" + eTag + "\n" //number 2
+ "<td><a href=\"(.*?)/profile\">(.*?)</a>" + eTag + "\n" //name 4 (3 not used)
+sTag + "(.*?)" + eTag + "\n" //active status 5
// +"(.*?)" //6
// +sTag + "(.*?)" + eTag + "\n" //tackles 7
// +"(.*?) //8
// +sTag + "(.*?)" + eTag //sacks 9
// +"(.*?) //10
// +sTag + "(.*?)" + eTag //ff 11 (not used)
// +"(.*?) //12
// +sTag + "(.*?)" + eTag //int 13
);
pattern=pattern.compile(
sTag+“(.*?”+eTag+”\n”//位置1-组
+sTag+“(.*)”+eTag+“\n”//2号
+“+eTag+”\n”//name 4(3未使用)
+sTag+“(.*)”+eTag+“\n”//active状态5
// +"(.*?)" //6
//+sTag+“(.*)”+eTag+“\n”//铲球7
// +"(.*?) //8
//+sTag+“(.*?”+eTag//sacks 9
// +"(.*?) //10
//+sTag+“(.*?”+eTag//ff 11(未使用)
// +"(.*?) //12
//+sTag+“(.*?”+eTag//int 13
);
我试图解析的HTML数据的格式如下:
<td class="tbdy1"><a href="/teams/atlantafalcons/profile?team=ATL">ATL</a></td></tr>
<tr class="even">
<td class="tbdy">SS</td>
<td class="tbdy">20</td>
<td><a href="/player/willallen/2506088/profile">Allen, Will</a></td>
<td class="tbdy">ACT</td>
<td class="ra">
TCKL
</td>
<td class="tbdy">36</td>
<td class="ra">
SCK
</td>
<td class="tbdy">0.0</td>
<td class="ra">
FF
</td>
<td class="tbdy">1</td>
<td class="ra">
INT
</td>
<td class="tbdy">--</td>
党卫军
20
表演
TCKL
36
SCK
0
FF
1.
国际的
--
有什么帮助吗?经过一番挖掘,我决定用另一种方式解决这个问题。上的论坛向我展示了如何消除所有空白。这使模式识别变得非常简单。我的最终设置结果如下:
line = line.replaceAll("\\s", "");
String sTag = "<tdclass=\"tbdy\">";
String eTag = "</td>";
Pattern pattern;
Matcher matcher;
pattern = Pattern.compile(
// pattern //stat group#
sTag + "(.*?)" + eTag //position 1
+sTag + "(.*?)" + eTag //number 2
+ "<td><ahref=\"(.*?)/profile\">(.*?)</a>" + eTag //name 4 (3 not used)
+sTag + "(.*?)" + eTag //status 5
+"(.*?)" //6
+sTag + "(.*?)" + eTag //tackles 7
+"(.*?)" //8
+sTag + "(.*?)" + eTag //sacks 9
+"(.*?)" //10
+sTag + "(.*?)" + eTag //ff 11 (not used)
+"(.*?)" //12
+sTag + "(.*?)" + eTag //int 13
);
System.out.println(" " + matcher.group(1) +" "+ matcher.group(2) + " " + matcher.group(4)+" "+ matcher.group(5)+ " " + matcher.group(7)+ " " + matcher.group(9)+ " " + matcher.group(13));
line=line.replaceAll(“\\s”和“);
字符串sTag=“”;
字符串eTag=“”;
模式;
匹配器匹配器;
pattern=pattern.compile(
//模式//统计组#
sTag+“(.*?”+eTag//位置1
+sTag+“(.*?”+eTag//2号
+“”+eTag//name 4(3未使用)
+sTag+“(.*?”+eTag//状态5
+"(.*?)" //6
+sTag+“(.*?”+eTag//铲球7次
+"(.*?)" //8
+sTag+“(.*?”+eTag//sacks 9
+"(.*?)" //10
+sTag+“(.*?”+eTag//ff 11(未使用)
+"(.*?)" //12
+sTag+“(.*?”+eTag//int 13
);
System.out.println(“+matcher.group(1)++matcher.group(2)++matcher.group(4)++matcher.group(5)++matcher.group(7)++matcher.group(9)++matcher.group(13));
我希望我可以!你有没有其他解决问题的方法的建议?我必须用Java解析代码,这是我所知道的唯一要求。另外,将Pattern.compile([Pattern])更改为Pattern.compile([Pattern],Pattern.DOTALL)也可以做到这一点。