日期:2014-05-19  浏览次数:20795 次

新手求助,带有正则表达式的代码运行到没有反应了
我想实现能从网页源码中抽出完整的汉字句子来存放在本地,然后用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这里再加上乱七八糟的标点 ]+