首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Google工作表中的regex替换和regex提取液的工作方式不同?

为什么Google工作表中的regex替换和regex提取液的工作方式不同?
EN

Stack Overflow用户
提问于 2020-05-09 00:04:14
回答 2查看 360关注 0票数 0

在这串

ID=“苹果”;TEXT=“苹果”;FOO=“酒吧”;

我要用这个正则表达式

TEXT="(.*?)“

把TEXT=“苹果”的苹果改成香蕉。

使用正则提取返回

苹果

但是,然后重新替换返回

ID=“苹果”;香蕉;FOO=“酒吧”;

我认为这应该是TEXT=的“香蕉”,考虑到苹果是回归的。

我该怎么做才能让它变成这样?

ID=“苹果”;TEXT=“香蕉”;FOO=“酒吧”;

示例链接

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-11 10:15:39

我认为你在这件事上运气不好。

首先,REGEXREPLACE在文档中声明,它实际上将更改所有匹配的文本:

regular_expression -正则表达式。文本中的所有匹配实例都将被替换。

因此,即使使用捕获组,也会得到整个匹配的字符串。我不知道这是否可能是一个问题或意图的行为,你仍然可以报告,如果你想这样(Help>Send反馈给谷歌)。

另一种思维方式是使用“向前看”和“向后看”来避免匹配不需要的文本。

代码语言:javascript
运行
复制
(?<=TEXT=")(.*?)(?=";)

这种方法的问题在于google的sheet函数使用RE2实现作为正则表达式。这意味着向前看,看看未实现后面。

解决办法

我克服所有问题的建议是创建一个简单的Apps脚本自定义函数,以便您可以使用javascript的正则表达式。

我为你的案子做了一个非常简单的代码

代码语言:javascript
运行
复制
function sensibleRegExpReplace(input, regEx, replace){

  var reg = new RegExp(regEx);

  return input.replace(reg, replace);

}

你会得到以下结果:

我想可以有一种方法来完成所有这些,只使用内置的使用辅助单元格的sheets函数。但我没能成功,这感觉更优雅。

票数 1
EN

Stack Overflow用户

发布于 2020-05-18 14:57:16

该表达式匹配整个字符串,并标识正则表达式组,即()中的内容。

TEXT="(.*?)“

Debuggex Demo

使用Regexmatch,您可以检查整个表达式中是否有正确的匹配,这就是Regexreplace替换所有内容的原因。

正则表达式捕获在正则表达式中定义的组。

获得预期表达式的表达式是:=REGEXREPLACE(B6,B8, "TEXT=$1"),其中$1是正则表达式中定义的组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61690049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档