regex - 从电子表格中单元格的值解析字符串和对象

标签 regex google-apps-script split google-sheets

我的电子表格包含烦人的值,并且对此很挣扎。所需数据位于 A 列的每个单元格中。单元格的值为 {"p0":70,"u3":71,"s7110":40},t45,{"t78":60,"s3310":15},p37,p36,{“p29”:44,“s8110”:95},p85,p14,{“s2710”:41},u47。此类值的数量约为 1000。我必须解析这些值。我需要来自这些值的字符串和对象。我可以忽略解析值的顺序。我无法手动解析。所以我决定使用脚本。

我尝试使用“split”进行解析。

var sheet = SpreadsheetApp.getActiveSheet();
var values = sheet.getRange("A1:A" + sheet.getLastRow()).getValues();
var result = [];
for (var i = 0; i < values.length; i++)
{
  result.push(values[i][0].split(","));
}

我得到了 t45,p37,p36,p85,p14,u47 作为字符串。但“ split ”也 split 了所有对象。例如,{"p0":70,"u3":71,"s7110":40} 被拆分为 {"p0":70, "u3":71"s7110":40}。有办法解决这个问题吗?

示例值是这样的。每行位于单元格 A1、A2、A3、A4、A5 中。

{"p0":70,"u3":71,"s7110":40},t45,{"t78":60,"s3310":15},p37,p36,{"p29":44,"s8110":95},p85,p14,{"s2710":41},u47
s6610,{"t25":70,"u8":43,"p35":86},u85,u74,{"s7710":83},{"p70":70,"u67":84},{"u71":43,"s1210":73},{"u45":84,"s710":15},{"u14":79,"p22":45},p31
u73,u12,{"t51":98,"u57":96},u31,p41,s1110,s6610,p55,{"t57":71,"s7510":83,"u62":17},u73
t50,{"t83":22,"p18":76},{"p47":12,"s8710":18,"u11":35},{"t14":74,"u72":51},{"p74":21,"t77":77},{"u62":84,"s3010":11},p81,u36,p67,{"t79":12,"u2":70,"s6010":98}
{"u54":51,"t31":31},t56,s4110,{"s3110":84,"t25":92,"p80":19},s3210,{"p65":54,"s8510":45},{"t73":78,"s6210":11},{"s2110":98,"p11":16},{"p61":55,"t88":75},p38

非常感谢您抽出时间。我对我不成熟的问题感到抱歉。

最佳答案

B1:

=ARRAYFORMULA(REGEXEXTRACT(A1:A5&",",REGEXREPLACE(REGEXREPLACE(A1:A5&",","{.*?}","($0)"),"([A-Za-z]\d+),","($1),")))

我们将除逗号 , 之外的所有对象和字符串都用 () 括起来,然后稍后提取它们。

编辑:更简单的 anchor :用于分隔的 , 逗号后面不跟着 "

=ARRAYFORMULA(SUBSTITUTE(SPLIT(SUBSTITUTE(A1:A5,","&CHAR(34),"😎"),","),"😎",","&CHAR(34)))


=ARRAYFORMULA(split(REGEXREPLACE(A1:A5,"(,)([^"&CHAR(34)&"])","😋$2"),"😋"))

关于regex - 从电子表格中单元格的值解析字符串和对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48897110/

相关文章:

javascript - Google Apps 脚本 HTML 服务的新功能

google-chrome-extension - 从 Chrome 扩展程序运行 Apps 脚本需要授权

google-apps-script - Google App 脚本 - 为什么 getTemporaryActiveUserKey() 为唯一用户返回相同的值

javascript - 如何将文本分解成单独的新行以便其他用户可以编辑并突出显示这些编辑(类似于 github)?

regex - 我怎样才能重复一个 Perl 正则表达式直到没有任何变化?

Python 和 re.compile 返回不一致的结果

regex - 帮助在类似 C 的语言中提取匹配花括号之间的文本 block

c# - 如何在 C# 中替换字符串的一部分?

java - 将字符串数字转换为整数数组

c# - 是否可以使用 String.Split 或正则表达式将字符串拆分为字符串数组并删除不在分隔符之间的部分?