如何在Google文档正则表达式替换中使用捕获组中的文本?


12

我正在尝试匹配某些文本,然后替换为文本以及一些额外的字符。最少的示例文本:

#10 Oranges. These are citrus fruits

所需的输出:

#10 Oranges. These are citrus fruits

正则表达式: (#\d{1,2}[^.]*\.)\s*

用。。。来代替: $1\n

(我已经Match using regular expressions检查了)

正则表达式成功匹配#10 Oranges.。但是,编号的反向引用不会用捕获组替换文本,而只是按字面意义输入(字面输出为$1\n)。我也尝试过对数字反向引用使用反斜杠,\1结果是相同的。

有什么我想念的吗?如何使用正则表达式在Google文档中重新插入匹配的文本?


2
现在,文档明确声明:Note: Capture groups only work with Google Sheets.请参阅support.google.com/docs/answer/62754#regular_expressions
用户

Answers:


4

简短答案

而不是使用内置的查找和替换功能,而是使用Google Apps脚本或附加组件。

说明

在Google文档的“查找和替换”功能上,“替换”部分不适用于正则表达式,也无法与replaceText()Google Apps脚本中“文档服务”中的方法一起使用,所幸JavaScript替换方法可以正常工作。

要了解创建简单脚本的基本知识,请参阅https://developers.google.com/apps-script/overview

此代码是参考中包含的代码的改编

function myFunction() {
  var body = DocumentApp.getActiveDocument().getBody();
  var paragraphs = body.getParagraphs();
  for (var i=0; i<paragraphs.length; i++) {
    var text = paragraphs[i].getText();
    paragraphs[i].replaceText(".*", 
       text.replace(/(\d{1,2}[^.]*\.)\s*/gi, '$1\n') );
  }
}

参考文献


3
我会考虑研究此问题,但是replace与regex一起使用是否会成为bug?根据此文档,它应该可以正常工作:support.google.com/docs/answer/62754#regular_expressions(请参阅参考资料Replace with regular expressions
用户

2

一点技巧,但不需要额外添加脚本,并且可能会覆盖您99%的用例。您仍可以将捕获组与RegexReplace和一起使用,并在$1或替换文本中进行引用$2。只需将您的正则表达式分成两个捕获组,然后使用随机(不经常使用)的字符连接即可~。然后,您可以从中获取整个返回值,并~用换行符替换:

=SUBSTITUTE(REGEXREPLACE(A1,"(#\d{1,2}[^.]*\.)(\s*)","$1~$2"),"~",CHAR(10))

屏幕截图

有关Google表格中使用的正则表达式语法的详细信息,请参阅re2规范


据我了解,问题是关于文档,而不是表格。
törzsmókus

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.