我有一个不带任何关闭标记(</.*?>
)并且没有任何新行(\n
)的HTML字符串:
<tr><td align=center>01/01/2001<td align=center>500,01<td align=center>0,99<td align=center>15
这无限期重复,并且可能有1或更多td的值。
目前我正在使用String.split("<tr><td align=center>")
来分隔字符串,然后使用一个正则表达式来查找日期,并使用一个正则表达式找到我想要的值。
这样的事情:
String[] stringArray = text.split("<tr><td align=center>");
String[] array1 = Arrays.copyOfRange(stringArray, stringArray.length - /*0<n<21*/,
stringArray.length);
for (int i = 0; i < array1.length; i++) {
System.out.println(array1[i]);
m1 = Pattern.compile("(\\d{2}\\/\\d{2}\\/\\d{4})").matcher(
array1[i]);
//getting date
m1.find();
System.out.println(m1.group(1));
m1 = Pattern.compile("<td align=center>(\\d+,*\\d*)").matcher(array1[i]);
while (m1.find()) {
System.out.println(m1.group(/*0<n*/));
}
}
我想要一种方法来获得一个相当于array1的字符串(字符串的最后n个位置)但使用正则表达式。
我知道我可以在最后使用$
更大的正则表达式来获取最后一个<tr>
,但我希望在它之前得到所有19 <tr>
。
我不知道我在这里是否清楚。如果我能提供更多细节,请告诉我。
PS:是的,值是用','而不是'。'来写的。我稍后会使用替换。
答案 0 :(得分:1)
使用Java正则表达式,您无法将任意数量的匹配项收集到一个组中,因此除非您知道组的确切/最大数量,否则您必须多次应用正则表达式并自行收集匹配项。 / p>
顺便说一句,你应该在调用m1.find();
之前检查m1.group(1);
是否返回true,否则如果表达式不匹配你会得到IllegalStateException。
另外请注意,我会在循环外编译日期模式,可能是在一些初始化代码中。