如何在java中使用正则表达式模式从HTML页面提取数据

如何在java中使用正则表达式模式从HTML页面提取数据,java,html,regex,Java,Html,Regex,我试图从html页面中提取数据,并将其存储在字符串数组中 在HTML页面中,值如下所示 <tbody> <tr> <td style="width: 14%;">88055</td> <td style="width: 19%;" class="gris">Ville</td>

我试图从html页面中提取数据,并将其存储在字符串数组中

在HTML页面中,值如下所示

 <tbody>
                      <tr>
                        <td style="width: 14%;">88055</td>
                        <td style="width: 19%;" class="gris">Ville</td>
                        <td style="width: 33%;"><a href="repertoire-des-municipalites/fiche/municipalite/88055/" >Amos</a></td>
                        <td style="width: 34%;"><a href="repertoire-des-municipalites/fiche/mrc/880/" >Abitibi</a></td>
                      </tr>
                      <tr>
                        <td style="width: 14%;">85080</td>
                        <td style="width: 19%;" class="gris">Village</td>
                        <td style="width: 33%;"><a href="repertoire-des-municipalites/fiche/municipalite/85080/" >Angliers</a></td>
                        <td style="width: 34%;"><a href="repertoire-des-municipalites/fiche/mrc/850/" >Témiscamingue</a></td>
                      </tr>
                      <tr>
                        <td style="width: 14%;">87050</td>
                        <td style="width: 19%;" class="gris">Municipalité</td>
                        <td style="width: 33%;"><a href="repertoire-des-municipalites/fiche/municipalite/87050/" >Authier</a></td>
                        <td style="width: 34%;"><a href="repertoire-des-municipalites/fiche/mrc/870/" >Abitibi-Ouest</a></td>
                      </tr>
附言:我知道最好的方法是使用HTML解析器,但我不得不这样做

非常感谢


Bass

您可以使用类似的方法来硬编码匹配具有
市政属性的url,并获取wrt中的文本以
]*>(?:)*
匹配的任何字符都不是 url,然后匹配
,然后尝试匹配0或更多(全部 可选)使用此
(?:)


  • ([^我已经用python展示了。但是我相信正则表达式在Java中是一样的。使用Java函数来查找匹配项

    import re
    reg = r"<a href=.*?municipalite.*?>(.+?)</a>"
    result = re.findall(html)
    
    重新导入
    reg=r“”
    结果=re.findall(html)
    
    试试
    “*\\bhref=\”市政机构曲目/fiche/municipalite/\\d+/\”[^>]*>([^]*>([^你为什么不使用
    *?>
    ,贪婪而不是
    [^>]*
    ?如果使用贪婪匹配,它将匹配到最后一个
    跳过中间文本,而我们不这样做want@ritesht93工作得很有魅力,衷心感谢heart@ritesh93我想说的是非贪婪,
    代表的是非贪婪。不是吗?你参与了导致贪婪的文化。谢谢!!这对我也有帮助
     <tbody>
                          <tr>
                            <td style="width: 14%;">88055</td>
                            <td style="width: 19%;" class="gris">Ville</td>
                            <td style="width: 33%;"><a href="repertoire-des-municipalites/fiche/municipalite/88055/" >Amos</a></td>
                            <td style="width: 34%;"><a href="repertoire-des-municipalites/fiche/mrc/880/" >Abitibi</a></td>
                          </tr>
                          <tr>
                            <td style="width: 14%;">85080</td>
                            <td style="width: 19%;" class="gris">Village</td>
                            <td style="width: 33%;"><a href="repertoire-des-municipalites/fiche/municipalite/85080/" >Angliers</a></td>
                            <td style="width: 34%;"><a href="repertoire-des-municipalites/fiche/mrc/850/" >Témiscamingue</a></td>
                          </tr>
                          <tr>
                            <td style="width: 14%;">87050</td>
                            <td style="width: 19%;" class="gris">Municipalité</td>
                            <td style="width: 33%;"><a href="repertoire-des-municipalites/fiche/municipalite/87050/" >Authier</a></td>
                            <td style="width: 34%;"><a href="repertoire-des-municipalites/fiche/mrc/870/" >Abitibi-Ouest</a></td>
                          </tr>
    
    import java.util.*;
    import java.util.regex.*;
    import java.lang.*;
    import java.io.*;
    
    class test
    {
        public static void main (String[] args) throws java.lang.Exception
        {
            BufferedReader in  = new BufferedReader(new FileReader(new File("data")));
            String line="";
            Pattern p=Pattern.compile("href\\s*=\\s*(?:\"|').*municipalite/[^>]*>(?:<.*>)*([^<]*)<.*$");
            while ((line = in.readLine()) != null)
            {
                Matcher m=p.matcher(line);
                while(m.find())
                    System.out.println(m.group(1)); 
            }
            in.close();
        }
    }
    
    $ javac test.java 
    $ java test 
    Amos
    Angliers
    Authier
    $
    
    href\\s*=\\s*(?:\"|').*municipalite/[^>]*>(?:<.*>)*([^<]*)<.*$
    
    import re
    reg = r"<a href=.*?municipalite.*?>(.+?)</a>"
    result = re.findall(html)
    
    Amos
    Angliers
    Authier
    
    public class HrefRegex
    {
        public static void main(final String[] args)
        {
            final String[] sampleLines = new String[] {
                "  </tr>",
                "    <td style=\"width: 14%;\">88055</td>",
                "    <td style=\"width: 19%;\" class=\"gris\">Ville</td>",
                "    <td style=\"width: 33%;\"><a href=\"repertoire-des-municipalites/fiche/municipalite/88055/\" >Amos</a></td>",
                "    <td style=\"width: 34%;\"><a href=\"repertoire-des-municipalites/fiche/mrc/880/\" >Abitibi</a></td>",
                "  </tr>",
                "  <tr>",
                "    <td style=\"width: 14%;\">85080</td>",
                "    <td style=\"width: 19%;\" class=\"gris\">Village</td>",
                "    <td style=\"width: 33%;\"><a href=\"repertoire-des-municipalites/fiche/municipalite/85080/\" >Angliers</a></td>",
                "    <td style=\"width: 34%;\"><a href=\"repertoire-des-municipalites/fiche/mrc/850/\" >Témiscamingue</a></td>",
                "  </tr>",
                "  <tr>",
                "    <td style=\"width: 14%;\">87050</td>",
                "    <td style=\"width: 19%;\" class=\"gris\">Municipalité</td>",
                "    <td style=\"width: 33%;\"><a href=\"repertoire-des-municipalites/fiche/municipalite/87050/\" >Authier</a></td>",
                "    <td style=\"width: 34%;\"><a href=\"repertoire-des-municipalites/fiche/mrc/870/\" >Abitibi-Ouest</a></td>",
                "  </tr>",
              };
    
    
            final Pattern pattern = Pattern.compile(".*\\bhref=\"repertoire-des-municipalites/fiche/municipalite/\\d+/\"[^>]*>([^<]*)<.*");
    
            for (final String s : sampleLines)
            {
                final Matcher matcher = pattern.matcher(s);
    
                if (matcher.matches())
                {
                    System.out.println(matcher.group(1));
                }
            }
        }
    }