如何在java正则表达式中为常用单词过滤器添加单词列表

时间:2013-09-22 08:49:03

标签: java regex

这是我的正则表达式,用于过滤一些常用词:

copyInputString.replaceAll("\\b(" +"http"+ ")\\b", " ");

如何替换“http”来替换单词列表?我的意思是将一个单词替换为单词列表进行过滤。

如何编写代码?我试过了:

String commonWords = "http + haha + ...";

但它不起作用。需要帮助

4 个答案:

答案 0 :(得分:2)

最佳方法取决于您要过滤的干扰词的数量,您正在执行的替换类型以及您正在处理的文本数量。

单字噪音

吹扫

如果您只是做一些简单的事情,例如删除所有出现的“http”,“otherword”和“anotherword”,您可以使用OR语句为其创建一个正则表达式:

\b(http|otherword|anotherword)\b

如果你要有大量的单个单词清除并且你正在处理相对较短的字符串,你可以只做一个噪音字的哈希集,然后对输入字符串进行标记,这样你就可以检查每个标记是一个噪音词。

自定义替换

您可以将其作为带有单词和替换值的哈希映射,而不是制作干扰词的哈希集。

多字噪音

吹扫

如果你试图清除多字噪音,第一种方法仍然有效:

\b(phrase one|phrase two|four word noise phrase)\b

如果列表变得非常大,那么这也会变得很难看。

自定义替换

如果您想使用多词短语进行自定义替换,事情会变得更加复杂。您可以使用String.indexOf(String)循环来查看您的噪音短语是否在那里,您可以运行多个正则表达式替换,或者您可以为丑陋的组合正则表达式中的每个单词创建唯一的捕获组:

\b((phrase one)|(phrase two)|(four word phrase))\b

如果捕获的组为2,则匹配的短语1。如果它是3,则短语2匹配。等等......然后从hashmap / array /中获取相应的替换值并将其插入。


<小时/> 如果您最终使用正则表达式并且性能开始拖动,请记住,您通常可以组合多个表达式以实现更有效的替换过程:

“apple”,“apples”,“applesauce” - &gt;苹果(S(auce)?)?

答案 1 :(得分:1)

添加列表中的所有单词,然后像这样构建正则表达式:

List wordList = new ArrayList<String>();
// populate your wordList

// build the regex
String lstr = wordList.toString();
String regex  = lstr.substring(1, lstr.length()-1).replace(", ", "|");

// replacement
String replaced = copyInputString.replaceAll("\\b(" + regex + ")\\b", " ");

答案 2 :(得分:0)

如何使用像这样的管道运算符?

String input = "Karel Alena Josef Petr Marta Vojtěch";
String regexp = "\\bAlena\\b|\\bMarta\\b";  
String output = input.replaceAll(regexp, " ");
assert("Karel   Josef Petr   Vojtěch".equals(output));

答案 3 :(得分:0)

正则表达式应该是

String commonWordsRegex = "\\b(http|haha|commonWords)\\b";

将单词列表与|连接。