我在Google脚本中使用正则表达式来规范化公司名称,虽然我通过替换某些单词,标点符号和空格的组合非常接近完美,但我的最后一步是用3或更少的单词替换任何单词字母。
但是,在一开始他们的名字,即AB控股公司,它就摆脱了一些公司的缩略语。我不希望这与AB匹配,我希望它能找到罕见的“the”或公司代码(特别是SPA和NV等国外代码和Co和Inc)。这些代码不一定在字符串的末尾,但它们在开头之后似乎总是至少有4个字符。
我目前正在使用
text = text.replace(/\b[a-z]{1,3}\b)/i," ");
忽略[a-z]作为缺失的上限,我已单独处理
我认为可行的是“跳过”前几个字符,可能是4个是安全的,并且可能学习如何在将来包含空格和/或数字。所以我在看到另外一个相关的问题后写了这个。
text = text.replace(/((.{4})(.*)\b[a-z]{1,3}\b)/i," ");
Scipts似乎不允许外观,我的版本似乎不起作用。我输了。
感谢您的帮助。
答案 0 :(得分:0)
这是一个解决方案:
text = text.replace("/^(.{4}.*)(\b[a-z]{1,3}\b)(.*)/gmi", "$1$3");
我改变的是:
括起括号中的所有组 - 以便在替换时将其捕获并使用;
既然你提到被替换的词可能不在字符串的末尾,我还添加了第三组 - 以匹配之后的所有内容。
包含替换字符串(组1和组3)中单词前后的部分。
但请注意,它可能会返回误报 - 即如果公司名称是公司ABC,Inc。,它也会捕获ABC。因此,如果您知道要替换的单词,最好只使用更改:
text = text.replace("/^(.{4}.*)\b(Co|Inc|SPA|NV|the)\b(.*)/gmi", "$1$3");