【问题标题】:How to clear all commas except for commas in even position in sheet?如何清除工作表中偶数位置的逗号除外的所有逗号?
【发布时间】:2022-11-12 08:14:33
【问题描述】:

我有多行字符串,其中字符串都是错误的。这是一行几何和预期输出的示例:

id geometry output
1 POLYGON (( 106.812271, -6.361551, 106.812111, -6.361339, 106.81205, -6.361177, 106.81206, -6.360905, 106.812055, -6.360582, 106.812065, -6.360218, 106.812293, -6.359295, 106.812593, -6.358644, 106.812436, -6.358406, 106.8121515, -6.3582051, 106.8123, -6.357823, 106.81244, -6.357407, 106.812612, -6.356842, 106.812719, -6.356544, 106.81274, -6.356384, 106.812864, -6.356148, 106.813019, -6.356021, 106.813287, -6.355797, 106.813781, -6.355286, 106.814076, -6.354751, 106.814277, -6.354393, 106.814403, -6.354027, 106.814553, -6.353814, 106.814736, -6.353526, 106.814993, -6.353302, 106.81516, -6.353024, 106.815358, -6.35279, 106.815509, -6.352588, 106.815675, -6.352331, 106.8153007, -6.3521138, 106.8151398, -6.3520137, 106.8149789, -6.3518005, 106.8147643, -6.3516939, 106.8144639, -6.3516245, 106.8141527, -6.3515392, 106.8135734, -6.351342, 106.813171, -6.3512034, 106.8123284, -6.3509219, 106.8122418, -6.3511298, 106.8118164, -6.3521534, 106.8116597, -6.3525047, 106.8111849, -6.3535692, 106.8102245, -6.3554942, 106.8093545, -6.3568947, 106.8085097, -6.3580518, 106.80795, -6.358832, 106.8077793, -6.3590429, 106.807668, -6.359441, 106.807499, -6.360346, 106.8072531, -6.3616378, 106.8071476, -6.3622599, 106.8070637, -6.3626798, 106.8070823, -6.3629367, 106.8071207, -6.3634531, 106.8078269, -6.363831, 106.809448, -6.364124, 106.810574, -6.364198, 106.81066, -6.362993, 106.811175, -6.36277, 106.812087, -6.361703, 106.812271, -6.361551)) POLYGON (( 106.812271 -6.361551, 106.812111 -6.361339, 106.81205 -6.361177, 106.81206 -6.360905, 106.812055 -6.360582, 106.812065 -6.360218, 106.812293 -6.359295, 106.812593 -6.358644, 106.812436 -6.358406, 106.8121515 -6.3582051, 106.8123 -6.357823, 106.81244 -6.357407, 106.812612 -6.356842, 106.812719 -6.356544, 106.81274 -6.356384, 106.812864 -6.356148, 106.813019 -6.356021, 106.813287 -6.355797, 106.813781 -6.355286, 106.814076 -6.354751, 106.814277 -6.354393, 106.814403 -6.354027, 106.814553 -6.353814, 106.814736 -6.353526, 106.814993 -6.353302, 106.81516 -6.353024, 106.815358 -6.35279, 106.815509 -6.352588, 106.815675, -6.352331, 106.8153007, -6.3521138, 106.8151398 -6.3520137, 106.8149789 -6.3518005, 106.8147643 -6.3516939, 106.8144639 -6.3516245, 106.8141527 -6.3515392, 106.8135734 -6.351342, 106.813171 -6.3512034, 106.8123284 -6.3509219, 106.8122418 -6.3511298, 106.8118164 -6.3521534, 106.8116597 -6.3525047, 106.8111849 -6.3535692, 106.8102245 -6.3554942, 106.8093545 -6.3568947, 106.8085097 -6.3580518, 106.80795 -6.358832, 106.8077793 -6.3590429, 106.807668 -6.359441, 106.807499 -6.360346, 106.8072531 -6.3616378, 106.8071476 -6.3622599, 106.8070637 -6.3626798, 106.8070823 -6.3629367, 106.8071207 -6.3634531, 106.8078269 -6.363831, 106.809448 -6.364124, 106.810574 -6.364198, 106.81066 -6.362993, 106.811175 -6.36277, 106.812087 -6.361703, 106.812271 -6.361551))

一个例子如下。我需要去掉所有奇数位置的逗号,只保留偶数位置的逗号。这样几何图形就可以成为输出。

我试着做一个 split(text.",") 并连接但是当列为空时它返回 xxx,,,, 这不是我想要的。 由于有些有超过 200 个逗号意味着我需要有超过 200 列,是否有更简单的方法,如使用正则表达式?有人请帮助。

【问题讨论】:

  • blank it returns xxx,,,, 您需要改用TEXTJOIN()
  • 不要分享spreadsheets/images作为唯一的数据来源,以避免问题结束。确保将输入和预期输出添加为纯文本表格问题。 Click here 轻松创建表格,分别是也更容易复制/粘贴.另外,如果您共享 Google 文件,请注意 your email address can also be accessed by the public
  • 多边形是字符串格式的坐标字符串。这是一个字符串。好的将尝试 textjoin()
  • 第二个数字总是负数-吗?
  • 使用REGEXREPLACEreplace ,([^,]*,?) with $1 的想法

标签: regex google-sheets google-sheets-formula flatten google-query-language


【解决方案1】:

如果第二个数字总是负数,这很简单,只需将, -(逗号、空格、破折号)替换为 (空格)即可。

=REGEXREPLACE(B2,", -"," ")

如果不,

=REGEXREPLACE(B2,"(-??d+.?d*),(s*-?d+.?d*)","$1$2")
  • 捕获组 #1:(-??d+.?d*)

    • -?? 零或文字破折号之一,后跟
    • d+ 一个或多个 digits 后跟
    • .?零个或一个文字.
    • d*零个或多个digits
  • 文字,

  • 捕获组#2 (s*-?d+.?d*)

    • s*零个或多个space字符
    • -? 零或文字破折号之一,后跟
    • d+ 一个或多个 digits 后跟
    • .? 零或文字 . 之一
    • d* 零个或多个 digits

仅替换为捕获组:$1$2

【讨论】:

    【解决方案2】:

    尝试:

    =INDEX(REGEXREPLACE(QUERY(FLATTEN(SPLIT(A1, ",")&IF(ISODD(
     SEQUENCE(1, COLUMNS(SPLIT(A1, ",")))),, ",")),,9^9), ",$", ))
    

    对于数组:

    =INDEX(IFERROR(BYROW(A1:A3, LAMBDA(x, REGEXREPLACE(QUERY(FLATTEN(SPLIT(x, ",")&
     IF(ISODD(SEQUENCE(1, COLUMNS(SPLIT(x, ",")))),, ",")),,9^9), ",$", )))))
    

    【讨论】:

      【解决方案3】:

      ,capture 任何non-commas 与optional 逗号匹配的想法:

      =REGEXREPLACE(A1; ",([^,]*,?)"; "$1")
      

      替换为$1第一组- See this demo at regex101

      【讨论】:

        猜你喜欢
        • 2012-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-03
        • 1970-01-01
        • 2017-09-13
        • 1970-01-01
        相关资源
        最近更新 更多