regex 在Google Sheets中批量查找和替换正则表达式

8fsztsew  于 2023-01-21  发布在  Go
关注(0)|答案(2)|浏览(152)

有没有一个函数、脚本或插件可以对Google Sheets中的一系列数据应用大量的正则表达式替换?我有一个包含地址列表的工作表,另一个包含两列中的几十对正则表达式(例如“St.$”和“Street”),我想用另一个中的对应短语替换地址列表中第一列短语的所有示例。
这个问题最初是由this回答的,但即使经过一些重大的调整以适应我的情况,我也只能让这个公式替换每个地址的一个短语,并且任何其它匹配的短语将被第一个单词替换(所以“1234 N. Main St.”变成了“1234 North Main North”,而不是“1234 North Main Street”)。有没有一种方法专门不这样做?

2uluyalo

2uluyalo1#

假设您的所有数据都在一列中,下面是一个脚本(比公式方法更简洁、更可扩展):
注:这不是就地更换。

function processColumn(column)
{
  // Add more as needed:
  // [Regex, Replacement]
  let replaceTable = 
  [
    [/\bN\./g, 'North'],
    [/\bS\./g, 'South'],
    [/\bSt\./g, 'Street']
  ];

  // A column is an array of rows
  // A row is an array of values.
  return column.map(row => 
    // This is an optimization to skip over blank values
    row[0] 
      ? replaceTable.reduce(
        // Replace one value at a time, in order
        (curString, tableEntry) => curString.replace(tableEntry[0], tableEntry[1]),
        row[0]
      )
      : ''
  );
}

用法示例:

你所有的数据都是A:A格式的,就像这样:
| A类|
| - ------|
| 主街北123号|
| 主街北124号|
| 南主街19号|
然后在B栏中:

=processColumn(A:A)

这将把所有处理过的值放入B列:
| 乙|
| - ------|
| 北大街123号|
| 北大街124号|
| 南大街19号|

w41d8nur

w41d8nur2#

可能是这样:

values = sheet.getDataRange().getDisplayValues()
values = values.map(outer => outer.map(inner => inner
                                            .replaceAll(/\bN\./g, 'North')
                                            .replaceAll(/\bS\./g, 'South')
                                            .replaceAll(/\bSt\./g, 'Street')
                                       )
                                      );

根据需要更改此values = sheet.getDataRange().getDisplayValues()

相关问题