【问题标题】:How to replace all elements of alphabetical list in google script for google doc如何在谷歌文档的谷歌脚本中替换字母列表的所有元素
【发布时间】:2020-08-22 21:44:20
【问题描述】:

我想自动化一些文档编辑。现在,我正在尝试用 ~

替换不正确的测验列表元素

例如,假设在一个文档中我有以下内容,并且我已经使用 = 标记了正确的选择。

The capital of Norway is:
a. Haifa
=Oslo
c. Lund
d. the Hague
e. Manitoba

我想创建一个脚本来替换 a.、c.、d. 和 e。每个都有~

我尝试创建一个如下所示的函数:

function incorrectAnswera(){
  var body = DocumentApp.getActiveDocument().getBody();
  body.replaceText("a.", "~");
}

但它会替换“a”的每个实例以及后面的字符 ~。例如,地球变成了 E~th。

【问题讨论】:

  • 我必须为我糟糕的英语水平道歉。不幸的是,我无法理解你的目标。那么为了正确理解它,您能否提供您期望的示例输入和输出?借此,我想尝试了解您的目标。
  • 田池,感谢您的尝试!我的问题得到了回答:)

标签: regex google-apps-script google-docs


【解决方案1】:

Text.replaceText(searchPattern, replacement) 使用 regular expressions 表示 searchPattern,特别是 Google 的 RE2 library

作为正则表达式,a. 将匹配字母“a”加上它后面的 any 字符,因为 . 是正则表达式中匹配 的特殊“通配符”字符任何字符。

作为正则表达式约定,您可以使用反斜杠从. 字符中删除特殊含义:\.。但是,由于 Apps Script 实现采用 JavaScript 字符串作为输入,因此您必须(令人讨厌地)添加 extra 反斜杠才能获得所需的效果。

a\\. 匹配字符序列“a”后跟一个句点。

这仍然会造成破坏,因为如果你有句子

在雨中,我打伞。

它将被替换为

下雨天,我用伞~

要解决这个问题,我们需要指定行我们的表达式开头,并为此保留^ 字符。

^a\\. 只会在行以“a”开头后跟句点时替换。

为了实现您的既定目标:

我想创建一个脚本来替换 a.、c.、d. 和 e。每个都有~

您还需要使用一组字符来匹配您可以使用[] 定义的字符。

从表面上看你的请求,集合是[acde],但是由于你已经用=标记了正确的答案,也许只使用“a”到“e”的范围会更好: [a-e](包括从 a 到 e 的所有 5 个字母)。

作为最后的细节,如果您希望在a. 序列前面有空格,您可以使用\\s* 来表示“零个或多个空格字符”,但是替换可能会删除白色空间。

// mark the start of the correct answer with a "=" before running this function
function markIncorrectAnswers() {
  DocumentApp.getActiveDocument().getBody()
    .replaceText("^\\s*[a-e]\\.", "~");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    相关资源
    最近更新 更多