首页 文章

Google表格公式中的多个正则表达式匹配

提问于
浏览
6

我使用Google表格正则表达式公式在单元格 A1 中说'm trying to get the list of all digits preceding a hyphen in a given string (let' s:

=REGEXEXTRACT(A1, "\d-")

我的问题是它只返回第一场比赛...... how can I get all matches?

示例文字:

"A1-Nutrition;A2-ActPhysiq;A2-BioMeta;A2-Patho-jour;A2-StgMrktg2;H2-Bioth2/EtudeCas;H2-Bioth2/Gemmo;H2-Bioth2/Oligo;H2-Bioth2/Opo;H2-Bioth2/Organo;H3-Endocrino;H3-Génétiq"

我的公式返回 1- ,而我想得到 1-2-2-2-2-2-2-2-2-2-3-3- (作为数组或连接文本) .

我知道我可以使用脚本或其他函数(如 SPLIT )来实现所需的结果,但我真正想知道的是如何在“ REGEX.* " Google Sheets formula. Something like the " g lobal”中获取re2正则表达式以返回此类多个匹配项 . regex101.com上的“首次匹配后返回”选项

我也尝试用 REGEXREPLACE 删除不需要的文本,也没有成功(我无法摆脱不在连字符之前的其他数字) .

任何帮助赞赏!谢谢 :)

4 回答

  • 2

    实际上,您可以使用regexreplace在单个公式中执行此操作,以使用捕获组包围所有值,而不是替换文本:

    =join("",REGEXEXTRACT(A1,REGEXREPLACE(A1,"(\d-)","($1)")))
    

    基本上它所做的是用"capture group"围绕 \d- 的所有实例然后使用正则表达式提取,它整齐地返回所有捕获 . 如果你想将它连接回一个字符串,你可以使用join将它打包回一个单元格:

    enter image description here

  • 2

    编辑

    我提出了更一般的解决方案:

    =regexreplace(A1,"(.)?(\d-)|(.)","$2")


    尝试这个公式:= regexreplace(regexreplace(A1,“[^\ - 0-9]”,“”),“(\ d-)|( . )”,“$ 1”)它将处理这样的字符串: “A1-Nutrition; A2-ActPhysiq; A2-BioM --- eta; A2-PH3-Généti*** 566 * 9q”,输出:1-2-2-2-3-

  • 3

    我无法获得为我的案件工作的公认答案 . 我想这样做,但需要一个快速的解决方案,并采取以下措施:

    输入:

    1111 days, 123 hours 1234 minutes and 121 seconds
    

    预期产量:

    1111 123 1234 121
    

    式:

    =split(REGEXREPLACE(C26,"[a-z,]"," ")," ")
    
  • 1

    这似乎工作,我试图验证它 .

    逻辑是

    (1)替换字母后跟连字符

    (2)替换任何没有连字符的数字

    (3)替换所有不是数字或连字符的东西

    =regexreplace(A1,"[a-zA-Z]-|[0-9][^-]|[a-zA-Z;/é]","")
    

    结果

    1-2-2-2-2-2-2-2-2-2-3-3-
    

    Analysis

    我不得不在程序上逐步说服自己这是正确的 . 根据this reference,当管道符号分隔的替代品时,正则表达式应按从左到右的顺序匹配它们 . 除非规则1首先出现,否则上述公式无法正常工作(否则,在规则(1)可以发挥作用之前,它会将除数字或连字符之外的所有字符减少为null,并且从"Patho-jour"获得额外的连字符) .

    以下是我认为必须处理文本的一些示例

    enter image description here

相关问题