我在尝试清理一些文本时遇到了一些麻烦。我得到一个输入文本,我想删除所有非单一空格的空白字符,删除句点,逗号等,但不要拆分这样的单词:
博士。 老师' 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,但如果有其他语言有更好的工具,我也愿意使用它。
答案 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(...)
。你可以决定这是不是一个好主意。