gpt4 book ai didi

javascript - 将 Sed 函数转变为 JavaScript 正则表达式

转载 作者:太空宇宙 更新时间:2023-11-04 00:23:23 24 4
gpt4 key购买 nike

我在 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 RegExp

这是我的部分实现

        text=text.toLowerCase();
text=text.replace(/(?:\\[rn]|[\r\n]+)+/g, " ");
text=text.replace(/'/g, " ' ");
text=text.replace(/"/g, '');
text=text.replace(/\./g, ' \. ');
text=text.replace(/,/g, ' \, ');
text=text.replace(/\(/g, ' ( ');
text=text.replace(/\)/g, ' ) ');
text=text.replace(/!/g, ' ! ');
text=text.replace(/\?/g, ' ! ');
text=text.replace(/;/g, ' ');
text=text.replace(/:/g, ' ');
text=text.replace(/\t+/g,'\t').replace(/\t\s/g,' ').replace(/\t/g,' ');

尽管采用了这种实现方式,当我使用 JavaScript 版本生成文件(使用 FastCSV Node 库)时,它会创建一个错误的 CSV,从而导致读取时出现解析错误

Error: Parse Error: expected: '"' got: 'i'. at 'i met her 

当使用 sed 规范化文件,然后使用 FastCSV 读取时,它将正常工作。

最佳答案

我想你可以尝试下面的代码。演示是here .

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, ' ');

说明:

  • sed-s 's/^/__label__/'添加'__label__'到每行的开头。在js中你需要多行修饰符, /m为此。
  • 消除引号很容易从 sed 转换为 js:-e 's/"//g'变成text = text.replace(/"/g, '');
  • 将换行符替换为空格基本相同:-e 's/<br \/>/ /g'变成text = text.replace(/<br \/>/g, ' '); .
  • 您在几个字符周围添加空格。我将它们集中到一个替换中:text = text.replace(/([()!?.',])/g, ' $1 ');
    • 您可以在一个字符类中指定多个字符:[...] 。如果括号内提及,它将匹配 1 个字符。不过,^ 有一些技巧。和 -字符 - 您可以检查它们 here .
    • 此字符类位于捕获组内:(...)所以我们可以用 $1 来引用它在替换范围内。
  • 您想要用空格替换某些字符。我将它们集中在一起,如下所示:text = text.replace(/[;:]/g, ' '); .
  • 我不熟悉tr命令。我相信在这种情况下它会用一个空格替换多个空格。您可以使用如下正则表达式来完成此操作:text = text.replace(/ +/g, ' '); .

关于javascript - 将 Sed 函数转变为 JavaScript 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43743685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com