将Sed函数转换为JavaScript正则表达式
我在将Sed函数转换为JavaScript正则表达式,javascript,node.js,regex,bash,sed,Javascript,Node.js,Regex,Bash,Sed,我在bash normalize_text() { tr '[:upper:]' '[:lower:]' | sed -e 's/^/__label__/g' | \ sed -e "s/'/ ' /g" -e 's/"//g' -e 's/\./ \. /g' -e 's/<br \/>/ /g' \ -e 's/,/ , /g' -e 's/(/ ( /g' -e 's/)/ ) /g' -e 's/\!/ \! /g' \ -e 's
bash
normalize_text() {
tr '[:upper:]' '[:lower:]' | sed -e 's/^/__label__/g' | \
sed -e "s/'/ ' /g" -e 's/"//g' -e 's/\./ \. /g' -e 's/<br \/>/ /g' \
-e 's/,/ , /g' -e 's/(/ ( /g' -e 's/)/ ) /g' -e 's/\!/ \! /g' \
-e 's/\?/ \? /g' -e 's/\;/ /g' -e 's/\:/ /g' | tr -s " "
}
尽管有这样的实现,但当我使用JavaScript版本生成文件(使用节点库)时,它将创建一个错误的CSV,导致在读取时出现解析错误
Error: Parse Error: expected: '"' got: 'i'. at 'i met her
当使用
sed
规范化文件,然后使用fastcvs
读取时,它将正常工作。我认为您可以尝试以下代码。演示是
text=text.replace(/^/gm,'.'标签');
text=text.replace(/“/g'”);
text=text.replace(/
/g',);
text=text.replace(/([()!?。,])/g,$1');
text=text.replace(/[;:]/g',);
text=text.replace(/+/g',);
说明:
- sed-s
在每行的开头添加's/^/\uuu标签
。在js中,需要多行修饰符,'\uu标签
/m
- 删除引号很容易从sed转换为js:
变成-e的//“//g”
text=text。替换(//“/g”);
- 将换行符替换为空格基本相同:
变成-e的//
/g'text=text。替换(//
/g',); - 在几个字符周围添加空格。我将它们集中到一个替换中:
。text=text.replace(/([()!?,])/g,“$1”);
- 您可以在一个字符类中指定多个字符:
。如果括号中提到了一个字符,那么它将与一个字符相匹配。尽管[…]
和^
字符有一些技巧,您可以检查它们-
- 此字符类位于捕获组中:
,因此我们可以在替换中使用(…)
引用它$1
- 您可以在一个字符类中指定多个字符:
- 您想用空格替换一些字符。我将它们集中在一起,如下所示:
text=text.replace(/[;:]/g');
- 我不熟悉
命令。我相信在这种情况下,它会用一个空格替换多个空格。你可以用这样的正则表达式来完成:tr
text=text.replace(+/g');
sed
则不会。添加更多nfo,谢谢。替换看起来非常不同…s/'/'/g
似乎已翻译为。替换(/'/g,”)
,例如。尝试一次查看一个管道的输出,并将其与JavaScript进行比较,而不是尝试一次完成全部工作。请注意,JavaScript中的'\.'=='.
也需要每个模式的测试用例。由于指出了不同之处,请开始正确地修复它现在:text=text.replace(/'/g,“”);
。这是一个很好的建议,由于解析的文件很大,很难检查。
Error: Parse Error: expected: '"' got: 'i'. at 'i met her
text = text.replace(/^/gm, '__label__');
text = text.replace(/"/g, '');
text = text.replace(/<br \/>/g, ' ');
text = text.replace(/([()!?.',])/g, ' $1 ');
text = text.replace(/[;:]/g, ' ');
text = text.replace(/ +/g, ' ');