1

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

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

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

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

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

但它不起作用。需要帮忙

4

4 回答 4

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/whatever中获取相应的替换值并将其插入。



如果您最终使用正则表达式并且性能开始下降,请记住,您通常可以组合多个表达式以获得更有效的替换过程:

“苹果”、“苹果”、“苹果酱”-> 苹果(s(auce)?)?

于 2013-09-22T09:30:39.803 回答
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", " ");
于 2013-09-22T09:31:37.047 回答
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));
于 2013-09-22T08:56:32.793 回答
0

正则表达式应该是

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

将单词列表与|.

于 2013-09-22T09:11:59.350 回答