Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 匹配逗号,不包括括号中的逗号-对于Google工作表,使用RE2_Regex_Google Sheets_Re2 - Fatal编程技术网

Regex 匹配逗号,不包括括号中的逗号-对于Google工作表,使用RE2

Regex 匹配逗号,不包括括号中的逗号-对于Google工作表,使用RE2,regex,google-sheets,re2,Regex,Google Sheets,Re2,好的,听我说完!我见过几十个类似的正则表达式问题,但上下文就是一切!我试图将正则表达式搜索合并到GoogleSheets函数中,该函数将匹配长字符串中的所有逗号,同时排除括号中的逗号。不过,应该足够简单,GoogleSheets使用的是RE2,它显然不喜欢lookarounds,并且经常抛出令人沮丧的错误(“参数2值“whatever”不是有效的正则表达式”)。因此,我采取的许多方法都是不成功的 我应该注意的是,我必须使用GoogleSheets来完成这个过程(按照我的老板的说法),我将数据直接

好的,听我说完!我见过几十个类似的正则表达式问题,但上下文就是一切!我试图将正则表达式搜索合并到GoogleSheets函数中,该函数将匹配长字符串中的所有逗号,同时排除括号中的逗号。不过,应该足够简单,GoogleSheets使用的是RE2,它显然不喜欢lookarounds,并且经常抛出令人沮丧的错误(“参数2值“whatever”不是有效的正则表达式”)。因此,我采取的许多方法都是不成功的

我应该注意的是,我必须使用GoogleSheets来完成这个过程(按照我的老板的说法),我将数据直接从我们的一个API拉到表中,并且它在API中的结构不能改变。任何其他建议都是完全欢迎的

以下是数据的样子:

杏仁111、苋菜222、凤尾鱼333、苹果(中等、有机)444、杏5555、朝鲜蓟6666

我需要匹配主逗号,以便可以用它们进行分隔(或更改它们并用新字符进行分隔),同时保持次逗号周围的数据完整(即“(中等,有机)”

以下是我迄今为止尝试过的一些方法:

  • 在regex101中工作但不在工作表中的整洁环视

    (?<=\d), 
    
  • 尝试使用非捕获组(另外,我必须遗漏一些关于非捕获与捕获组概念的信息??因为在我运行此操作时,非cap组仍然包括在内…)

  • 在regex101中正确匹配,但在工作表中不匹配

    ,\s*(?![^()]*\))
    
好吧,这就是要点!任何帮助都将不胜感激。谢谢

可能适合:

=regexreplace(substitute(A1,",","#"),regexextract(substitute(A1,",","#"),"\(.+\)"),regexextract(A1,"\((.+)\)"))

您试过本页上的那个吗?您使用的是什么功能?如果需要匹配这些字符串,请使用
=REGEXEXTRACT(A1,“(?:\([^()]*\)|[^,])+”
@Thefourthbird-谢谢!不幸的是,这个表达式在工作表中不起作用。@WiktorStribiżew我使用的是REGEXREPLACE,但我并不喜欢它。我尝试将分隔符改为管道而不是逗号。我现在正试图合并你的表达式。@WiktorStribiżew同样的错误!床单太挑剔了。谢谢你的帮助。谢谢@pnuts的输入!我要试试看。啊,差不多了!Output=“大麦111#蔗糖222#木薯333#玉米玉米饼(有机#非转基因)#玉米444#粗粉555#”不幸的是,我这边的内部逗号仍在被替换。但我确信这是因为我的第一个参数(A1)中的数据实际上来自一个将JSON导入工作表的函数。不过看起来很棒!谢谢
,\s*(?![^()]*\))
=regexreplace(substitute(A1,",","#"),regexextract(substitute(A1,",","#"),"\(.+\)"),regexextract(A1,"\((.+)\)"))