当前位置: 代码迷 >> J2EE >> 新手,带有正则表达式的代码运行到没有反应了
  详细解决方案

新手,带有正则表达式的代码运行到没有反应了

热度:87   发布时间:2016-04-22 00:23:12.0
新手求助,带有正则表达式的代码运行到没有反应了
我想实现能从网页源码中抽出完整的汉字句子来存放在本地,然后用lucene来建立索引,但是一直没有想出来能够匹配完整汉字句子的正则表达式,我试着写了一个,但是运行到一半就没反应了,希望有人能帮我解答一下,另外还想求一个能匹配完整汉字句子包括标点符号什么的,或者有没有别的实现方法。代码和我实验的网页源码写在下面:
Java code
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileReader;import java.io.FileNotFoundException;import java.io.FileWriter;import java.io.IOException;import java.lang.Exception;import java.util.regex.*;public class pattern {    public static void main(String[] args) {            File f111 = new File("F:/JAVA代码存储/文件提取汉字/111.txt");            File f222 = new File("F:/JAVA代码存储/文件提取汉字/222.txt");            try{        BufferedReader reader=new BufferedReader(new FileReader(f111)); //缓冲流        StringBuilder sb=new StringBuilder();      //将所有源码按格式读入sb中        StringBuilder sb2=new StringBuilder();      //将所有匹配出的源码按格式写入sb2中            BufferedWriter bw=new BufferedWriter(new FileWriter(f222)); //缓冲流        String str,str2;      //负责读每一行源码        while((str=reader.readLine())!=null)        {            str=str+"\n";            sb.append(str);        }            String reg = "[\u4e00-\u9fa5](.|[\u4e00-\u9fa5])*。";                Pattern pat = Pattern.compile(reg);        System.out.println(0);        Matcher mat = pat.matcher(sb.toString());        System.out.println(mat.find());        if(mat.find()==false)        {System.out.println("没有匹配到");}        if(mat.find()==true)        {System.out.println("匹配到");}        System.out.println(1);        while(mat.find())        {            str2 = mat.group();                        if(str2.length()<1)                continue;            System.out.println(str2);            str2 = str2+"\n";            sb2.append(str2);        }        System.out.println(2);        String sbb;        sbb = sb2.toString();                bw.write(sbb);        reader.close();            bw.close();    }    catch(FileNotFoundException e1){}catch(IOException e2){}    catch(PatternSyntaxException e3){System.out.println("语法错误");}        System.out.println("完成");    }}

实验网页的源码:
http://view-source:http://war.163.com/12/1018/09/8E3BGLR700011232.html
我希望最后能只保存:
据台湾《联合报》报道…………刚好互补。

------解决方案--------------------
看不到你那个网站,我把163打开看了下,估计你是只想要标签中的字
因为如果你指提取中文和符号,像“林汉丑说,渔船雇用外籍佣兵,半年一期,一人折合新台币约54万元”
这句,就会变成"林汉丑说,渔船雇用外籍佣兵,半年一期,一人折合新台币约","万元"两个句子
你想要整段话的话,可以直接sb.toString().replaceAll("<[^>]+>|\n","");
------解决方案--------------------
[\u4e00-\u9fa5这里再加上乱七八糟的标点 ]+