使用正则表达式进行过滤

hmsuccess 2009-02-22 04:14:43
使用正则表达式来过滤一篇文章的多余单词和标点符号,并保留其他有用单词
如,This a xml book.
过滤后保留成:
xml book
谢谢
...全文
415 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
hmsuccess 2009-03-15
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 sunyujia 的回复:]
好久不见了hmsuccess 路过进来打声招呼。
[/Quote]
sunyujia,您好
sunyujia 2009-02-28
  • 打赏
  • 举报
回复
好久不见了hmsuccess 路过进来打声招呼。
hmsuccess 2009-02-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 bao110908 的回复:]
Java codeimportjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassTest {privatefinalstaticString[] stopWords={"a","an","and","for","in","the","this","that","which","what"};/*** 用于处理辅助词的正则表达式匹配器*/privatefinalstaticMatcher MATCHER=toRegex(stopWords);/*** 去除一些非字符的字符*/privatefinalstaticMatcher REMOVE_OTHER=Pattern.compile("[^a-zA-Z\\s-]").matcher("");publicsta…
[/Quote]
谢谢火老大,
我试试
猿敲月下码 2009-02-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hmsuccess 的回复:]
当然,那些无意义的单词可以提前给出
StopWords={a,an,this,that,which,what等}
[/Quote]
你看下这样行吗?
import java.util.regex.*;
public class MyRegex2 {

public static void main(String[] args) {

String[] temp={"a","an","this","that","which","what"};
String s="This a xml book.I like xml.\n";
s+="This is a C# book.But I love Java.\n";
s+=" This is an SQL book which I like.\n";
s+="This is a C++ book that I like.\n";
s=s.replaceAll(" {2,}", " ");//将多余空格转换成一个空格
s=s.replaceAll("(?m)^ +","");//将每行开头的空格去掉
for (int i = 0; i < temp.length; i++) {
s=s.replaceAll(" "+temp[i]+" ", " ");
}
System.out.println(s);
}
}
chxy148 2009-02-23
  • 打赏
  • 举报
回复
如果七楼能多一些注释就好了 有些地方不明白 请教~~~
时光瞄 2009-02-23
  • 打赏
  • 举报
回复
火龙果的正则确实太厉害...
chxy148 2009-02-23
  • 打赏
  • 举报
回复
顶 七楼~~~
pzj0204 2009-02-23
  • 打赏
  • 举报
回复
mark下
  • 打赏
  • 举报
回复
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

private final static String[] stopWords = {
"a", "an", "and", "for", "in", "the", "this", "that", "which", "what"
};

/**
* 用于处理辅助词的正则表达式匹配器
*/
private final static Matcher MATCHER = toRegex(stopWords);

/**
* 去除一些非字符的字符
*/
private final static Matcher REMOVE_OTHER = Pattern.compile("[^a-zA-Z\\s-]").matcher("");

public static void main(String...args) {
String str = "An Instant and, Accurate Estimation Method for Joins and Selection in a Retrieval-Intensive Environment";

long t0, t1;
t0 = System.nanoTime();
String s1 = processStopWord(str);
t1 = System.nanoTime();
System.out.println(s1);
System.out.println(t1 - t0);
}

private static String processStopWord(String statement) {
return MATCHER.reset(REMOVE_OTHER.reset(statement).replaceAll("")).replaceAll("");
}

/**
* 组成正则表达式
* @param stopWords
* @return
*
* 2009-2-22 下午11:06:08
*/
private static Matcher toRegex(String[] stopWords) {
StringBuffer sb = new StringBuffer("\\b(?i:");
for(int i = 0; i < stopWords.length; i++) {
if(i > 0) {
sb.append("|");
}
sb.append(stopWords[i]);
}
sb.append(")\\b\\s*");
// 拼接出的表达式是这样的:
// \b(?i:a|an|and|for|in|the|this|that|which|what)\b\s*
// 但是如果能拼摘成这样效率会高很多
// \b(?i:a(?:nd?)?|for|in|th(?:e|is|at)|wh(?:ich|at))\b\s*
return Pattern.compile(sb.toString()).matcher("");
}
}
  • 打赏
  • 举报
回复
做不到,正则表达式不能进行英语的语义分析,根本不可能知道哪些是有意义的单词,哪些是无意义的单词。
hmsuccess 2009-02-22
  • 打赏
  • 举报
回复
当然,那些无意义的单词可以提前给出
StopWords={a,an,this,that,which,what等}
無名VF 2009-02-22
  • 打赏
  • 举报
回复
呵 不懂 友情up
hmsuccess 2009-02-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 thc1987 的回复:]
改一下:
Java codeimportjava.util.regex.*;publicclassMyRegex2 {publicstaticvoidmain(String[] args) {
String s="This a xml book.I like xml.\n";
s+="This is a C# book.But I love Java.\n";
s+="This is a SQL book.\n";
s+="This is a C++ book.\n";
s=s.replaceAll("{2,}","");//将多余空格转换成一个空格s=s.replaceAll("(?m)^ +","");//将每行开头的空格去掉Matcher …
[/Quote]
谢谢您的回答,

我的意思是随便给定一篇文章P,然后将其中没有意义的单词去掉。
如:P={“An Instant and Accurate Estimation Method for Joins and Selection in a Retrieval-Intensive Environment”}
结果是R={“Instant Accurate Estimation Method Joins Selection Retrieval Intensive Environment”}
猿敲月下码 2009-02-22
  • 打赏
  • 举报
回复
改一下:
import java.util.regex.*;
public class MyRegex2 {

public static void main(String[] args) {
String s="This a xml book.I like xml.\n";
s+="This is a C# book.But I love Java.\n";
s+=" This is a SQL book.\n";
s+="This is a C++ book.\n";
s=s.replaceAll(" {2,}", " ");//将多余空格转换成一个空格
s=s.replaceAll("(?m)^ +","");//将每行开头的空格去掉
Matcher m=Pattern.compile("(?m)\\b(?<= a )(.*)book\\b").matcher(s);
while(m.find())
System.out.println(m.group());
}
}

我的结果:
xml book
C# book
SQL book
C++ book

不知道这样行不行
猿敲月下码 2009-02-22
  • 打赏
  • 举报
回复
import java.util.regex.*;
public class MyRegex2 {

public static void main(String[] args) {
String s="This a xml book.I like xml.\n";
s+="This is a C# book.But I love Java.\n";
s+=" This is a SQL book.\n";
s+="This is a C++ book.\n";
s=s.replaceAll(" {2,}", " ");//将多余空格转换成一个空格
s=s.replaceAll("(?m)^ +","");//将每行开头的空格去掉
Matcher m=Pattern.compile("(?m)\\ba(.*)book\\b").matcher(s);
while(m.find())
System.out.println(m.group());
}
}

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧