匹配Java String中的同时标记

时间:2016-03-29 20:53:09

标签: java regex

我正在编写一个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

由于

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);