javascript标记字符串以清理文本

时间:2016-08-16 19:28:12

标签: javascript regex text-processing

我在尝试清理一些文本时遇到了一些麻烦。我得到一个输入文本,我想删除所有非单一空格的空白字符,删除句点,逗号等,但不要拆分这样的单词:

博士。 老师' S

基本上我不想删除那些不会改变单词含义的标点符号,比如惊叹号,问号就可以了。

我写了一些js正则表达式,但我认为它非常混乱。有什么建议来清理它吗?

var cleaned_plaintext = input_text;

cleaned_plaintext = cleaned_plaintext.toLowerCase();
cleaned_plaintext = cleaned_plaintext.replace(/^\s+/mg,"");
cleaned_plaintext = cleaned_plaintext.replace(/[,:()]/mg,"");
cleaned_plaintext = cleaned_plaintext.replace(/\|\s+/mg,"");
cleaned_plaintext = cleaned_plaintext.replace(/\s\-+\s/mg,"");
cleaned_plaintext = cleaned_plaintext.replace(/\s{2,}/mg,"");
cleaned_plaintext = cleaned_plaintext.replace(/\.\s+/mg, " ");
cleaned_plaintext = cleaned_plaintext.replace(/\?/mg, "");
cleaned_plaintext = cleaned_plaintext.replace(/(\0\r\n|\n|\r|\0)/gm," ");
cleaned_plaintext = cleaned_plaintext.replace(/\./mg, "");
cleaned_plaintext = cleaned_plaintext.replace(/[©]\s+/mg, "");
cleaned_plaintext = cleaned_plaintext.replace(/[.,?!:;()–?|$©”“|…]/gm,"");

这是很多正则表达式,我觉得它可以清理很多。我只是不确定如何。我知道这是标记的javascript,但如果有其他语言有更好的工具,我也愿意使用它。

1 个答案:

答案 0 :(得分:1)

我认为你可以将许多正则表达式组合在一起。

你有这两个正则表达式:

/^\s+/mg
/\s{2,}/mg

它相当于:

/\s{2,}|^\s/mg

这个正则表达式:

/\s\-+\s/mg

可以写成:

/\s-+\s/mg

我不确定这一切是什么:

/[©]\s+/mg
/\|\s+/mg
/[,:()]/mg
/\?/mg
/\./mg
/[.,?!:;()–?|$©”“|…]/gm

您至少两次删除所有内容

请注意,)–?包含以下字符:

)*+,-./0123456789:;<=>?

你可以摆脱其中大部分并将你的一个正则表达式改为:

/[!(–?$”“…]/mg

要处理要删除可选尾随空格的2个符号,可以使用:

/[©|]\s?/mg

您使用这两个正则表来查找要用空格替换的内容:

/\.\s+/mg
/(\0\r\n|\n|\r|\0)/gm

您可以将它们组合在一起,并删除一些不需要的东西:

/\.\s+|\n|\r|\0/mg

运行这些新正则表达式的最佳顺序:

/\.\s+|\n|\r|\0/mg  //remember replace with space!
/\s-+\s/mg
/[©|]\s?/mg
/[!(–?$”“…]/mg
/\s{2,}|^\s/mg

您还可以将功能链接在一起,例如:.replace(...).replace(...).replace(...)。你可以决定这是不是一个好主意。