用java提取文本

用java提取文本,java,text-processing,Java,Text Processing,如果我有下面的字符串,如何用java提取编辑器前言文本?谢谢 <div class='chapter'><a href='page.php?page=1&filename=SomeFile&chapter=EDITORS PREFACE'>EDITORS PREFACE</a></div> 正如您在问题的评论中所写的,您需要href中的内容,这里使用Regex: <a[^>]*? href=\"(?<url&g

如果我有下面的字符串,如何用java提取编辑器前言文本?谢谢

<div class='chapter'><a href='page.php?page=1&filename=SomeFile&chapter=EDITORS PREFACE'>EDITORS PREFACE</a></div> 

正如您在问题的评论中所写的,您需要href中的内容,这里使用Regex:

<a[^>]*? href=\"(?<url>[^\"]+)\"[^>]*?>
此正则表达式将与Microsoft.NET Framework一起使用。它将捕获href中的内容,并将其放入名为url的组中

刚才注意到这个问题是用Java标记的。在Java中,自JDK 6起没有命名组,因此以下是Java的解决方案:

<a[^>]*? href="([^"]+)"[^>]*?>
上面的正则表达式将捕获href中的内容并将其放入组1

在这里测试它:

运行此程序:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches
{
    public static void main( String args[] ){

      // String to be scanned to find the pattern.
      String line = "<a href='page.php?page=1&filename=SomeFile&chapter=EDITORS PREFACE'>EDITORS PREFACE</a>";
      String pattern = "<a[^>]*? href=\'([^\']+)\'[^>]*?>";

      // Create a Pattern object
      Pattern r = Pattern.compile(pattern);

      // Now create matcher object.
      Matcher m = r.matcher(line);

      if (m.find( ))
      {
         // Found value: <a href='page.php?page=1&filename=SomeFile&chapter=EDITORS PREFACE'>
         System.out.println("Found value: " + m.group(0) );

         // Found value: page.php?page=1&filename=SomeFile&chapter=EDITORS PREFACE
         System.out.println("Found value: " + m.group(1) );
      }
      else
      {
         System.out.println("NO MATCH");
      }
   }
}

您想从href属性中提取还是从锚定标记之间提取?此外,您还有一个语法错误-href标记没有使用匹配的单引号关闭。您想要一个通用的解决方案来处理不同的格式,即HTML打印和缩进,还是只针对此示例字符串?如果你能通过编辑问题来解释你想完成什么,以及你已经尝试了什么,这会很有帮助。这是一个示例字符串,但是genreal解决方案会很好。如果你想要一个通用的解决方案,有很多可能实现这一点。所以你需要重新表述你的问题。可能是这样的:我有一个HTML文档,从其中的每一章我都想要第一个链接的文本。你的选项很大程度上取决于你的输入是真实的、格式良好的、XHTML还是HTML文档,或者只是一些偶尔会有标记的蹩脚文本,比如MSWord输出之类。一般来说,使用regex解析XML/HTML是个坏主意,因为regex将严重依赖于输入的确切结构。这是不能保证的,因此对输入的轻微更改(如重新排序属性)将破坏正则表达式。实现健壮性的唯一真正方法是使用HTML或XML解析器库。我使用了本页的第一个示例--我用您的示例替换了模式变量,并用我的示例替换了行。我刚刚发现了原因:你的行示例使用了单引号。我传递的正则表达式需要双引号。我用一个使用Eclipse运行的程序更新了答案。现在一切正常。你好,Leniel谢谢你的帮助,但我想你弄错了我的问题,我只想要文本编辑器前言,而不是整个链接。在你写的问题的第二条评论中,你想要href标签之间的文本。。。我将尝试更新答案。