求助:在Google表格中用ARRAYFORMULA和REGEXEXTRACT解析网球联赛数据
解决Google表格网球联赛数据拆分问题
批量提取球员与赛果(C-G列)
直接在C1单元格输入下面的公式,它会自动把A列的内容拆分到C到G列:
=ARRAYFORMULA(IF(A1:A="",,REGEXEXTRACT(A1:A, "^([A-Za-z]+(?: [A-Za-z]+)* \(\d+\)) \/ ([A-Za-z]+(?: [A-Za-z]+)* \(\d+\))((?:\d+-\d+(?:\[\d+-\d+\])?,? ?)+)([A-Za-z]+(?: [A-Za-z]+)* \(\d+\)) \/ ([A-Za-z]+(?: [A-Za-z]+)* \(\d+\))$")))
正则逻辑拆解:
([A-Za-z]+(?: [A-Za-z]+)* \(\d+\)):精准匹配「姓名 (数字)」格式的球员条目,支持姓名带中间名(比如John Michael (32))\/:匹配球员对之间的/分隔符((?:\d+-\d+(?:\[\d+-\d+\])?,? ?)+):兼容所有赛果格式,不管是2盘、3盘,还是带抢七的比分(比如7-6[10-8], 6-2或2-6,6-2,1-0[11-9])^和$:强制匹配整个单元格内容,避免部分匹配导致的拆分错位
错误检测(H列)
在H1单元格输入下面的公式,只要A列内容不符合预设格式(比如球员姓名缺失、赛果不完整),就自动显示Error:
=ARRAYFORMULA(IF(A1:A="",,IF(REGEXMATCH(A1:A, "^[A-Za-z]+(?: [A-Za-z]+)* \(\d+\) \/ [A-Za-z]+(?: [A-Za-z]+)* \(\d+\)(?:\d+-\d+(?:\[\d+-\d+\])?,? ?)+[A-Za-z]+(?: [A-Za-z]+)* \(\d+\) \/ [A-Za-z]+(?: [A-Za-z]+)* \(\d+\)$"),"","Error")))
特殊情况处理
如果球员姓名包含连字符(比如Mary-Anne (28)),把正则里的[A-Za-z]改成[A-Za-z-]即可,调整后的提取公式:
=ARRAYFORMULA(IF(A1:A="",,REGEXEXTRACT(A1:A, "^([A-Za-z-]+(?: [A-Za-z-]+)* \(\d+\)) \/ ([A-Za-z-]+(?: [A-Za-z-]+)* \(\d+\))((?:\d+-\d+(?:\[\d+-\d+\])?,? ?)+)([A-Za-z-]+(?: [A-Za-z-]+)* \(\d+\)) \/ ([A-Za-z-]+(?: [A-Za-z-]+)* \(\d+\))$")))
内容的提问来源于stack exchange,提问作者Allan Thompson
相关产品推荐
相关产品推荐

