我想实现能从网页源码中抽出完整的汉字句子来存放在本地,然后用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这里再加上乱七八糟的标点 ]+