我正在编写一个Java程序,其中有一些数据必须从String中提取(实际上这是html)。
我的代码如下:
font-size
在处理此问题时,我在文件中遇到了两个案例。
案例1
while ((line = in.readLine()) != null) {
if (line.contains("xrefInternal")) {
String ftnNum = line.replaceAll("(.*)(<sup>)([0-9]+)(</sup>)(.*)", "$3");
String ftnRefNum = line.replaceAll("(.*)(<span class=\"xrefInternal\" id=\"fo)([0-9]+)(\")(.*)", "$3");
System.out.println(ftnRefNum + "\t" + ftnNum);
}
}
案例2
<p class="paraNoIndent1" style="text-indent: 0%;">texy<span class="xrefInternal" id="fo249"><a href="abc.html#fo_249"><sup>2</sup></a></span> Tewxt.<span class="xrefInternal" id="fo250"><a href="abc.html#fo_250"><sup>3</sup></a></span> text</p>
<p class="paraNoIndent1" style="text-indent: 0%;">Text.<span class="xrefInternal" id="fo248"><a href="abc.html#fo_248"><sup>1</sup></a></span></p>
不会打印任何内容。它被跳过(我想是因为试图在同一参数中获取两个数据元素)。
Case 1
按预期打印结果
Case 2
这是有效的Regex Fiddle
请告诉我如何修改代码,以便248 1
的功能类似于Case 1
由于
答案 0 :(得分:0)
(如果/提供更多信息,我会更新/删除此信息。评论时间过长,会帮助旗帜人员。)
我得到(文字代表示例编号):
250 one 3
248 two 1
当我运行时:
String example1="<p class=\"paraNoIndent1\" style=\"text-indent: 0%;\">texy<span class=\"xrefInternal\" id=\"fo249\"><a href=\"abc.html#fo_249\"><sup>2</sup></a></span> Tewxt.<span class=\"xrefInternal\" id=\"fo250\"><a href=\"abc.html#fo_250\"><sup>3</sup></a></span> text</p>";
String ftnNum = example1.replaceAll("(.*)(<sup>)([0-9]+)(</sup>)(.*)", "$3");
String ftnRefNum = example1.replaceAll("(.*)(<span class=\"xrefInternal\" id=\"fo)([0-9]+)(\")(.*)", "$3");
System.out.println(ftnRefNum + " one " + ftnNum);
String example2="<p class=\"paraNoIndent1\" style=\"text-indent: 0%;\">Text.<span class=\"xrefInternal\" id=\"fo248\"><a href=\"abc.html#fo_248\"><sup>1</sup></a></span></p>";
String ftnNum2 = example2.replaceAll("(.*)(<sup>)([0-9]+)(</sup>)(.*)", "$3");
String ftnRefNum2 = example2.replaceAll("(.*)(<span class=\"xrefInternal\" id=\"fo)([0-9]+)(\")(.*)", "$3");
System.out.println(ftnRefNum2 + " two " + ftnNum2);