在这串
ID=“苹果”;TEXT=“苹果”;FOO=“酒吧”;
我要用这个正则表达式
TEXT="(.*?)“
把TEXT=“苹果”的苹果改成香蕉。
使用正则提取返回
苹果
但是,然后重新替换返回
ID=“苹果”;香蕉;FOO=“酒吧”;
我认为这应该是TEXT=的“香蕉”,考虑到苹果是回归的。
我该怎么做才能让它变成这样?
ID=“苹果”;TEXT=“香蕉”;FOO=“酒吧”;
发布于 2020-05-11 10:15:39
我认为你在这件事上运气不好。
首先,REGEXREPLACE
在文档中声明,它实际上将更改所有匹配的文本:
regular_expression
-正则表达式。文本中的所有匹配实例都将被替换。
因此,即使使用捕获组,也会得到整个匹配的字符串。我不知道这是否可能是一个问题或意图的行为,你仍然可以报告,如果你想这样(Help>Send反馈给谷歌)。
另一种思维方式是使用“向前看”和“向后看”来避免匹配不需要的文本。
(?<=TEXT=")(.*?)(?=";)
这种方法的问题在于google的sheet函数使用RE2实现作为正则表达式。这意味着向前看,看看未实现后面。
解决办法
我克服所有问题的建议是创建一个简单的Apps脚本自定义函数,以便您可以使用javascript的正则表达式。
我为你的案子做了一个非常简单的代码
function sensibleRegExpReplace(input, regEx, replace){
var reg = new RegExp(regEx);
return input.replace(reg, replace);
}
你会得到以下结果:
我想可以有一种方法来完成所有这些,只使用内置的使用辅助单元格的sheets函数。但我没能成功,这感觉更优雅。
发布于 2020-05-18 14:57:16
该表达式匹配整个字符串,并标识正则表达式组,即()中的内容。
TEXT="(.*?)“
使用Regexmatch,您可以检查整个表达式中是否有正确的匹配,这就是Regexreplace替换所有内容的原因。
正则表达式捕获在正则表达式中定义的组。
获得预期表达式的表达式是:=REGEXREPLACE(B6,B8, "TEXT=$1")
,其中$1是正则表达式中定义的组。
https://stackoverflow.com/questions/61690049
复制相似问题