使用REGEXEXEXTRACT是Google电子表格来解析另一个单元格中的条目

z18hc3ub  于 2023-05-01  发布在  Go
关注(0)|答案(1)|浏览(124)

我试图找到一种方法来使用ARRAYFORMULA和REGEXEXMATCH来解析从网球联盟网站下载到Google电子表格中的列中的条目。
通常,对于单元格A1中的Fred Budde (56) / Warren Girle (55)7-6, 7-5Dan McClure (54) / Brian Giesecke (68),我希望复制:

  • Fred Budde (56)进入C列第1行,
  • Warren Girle (55)进入列D行1,
  • 结果7-6, 7-5进入列E行1,
  • Dan McClure (54)到列F行1和
  • Brian Giesecke (68)到列G行1中。

当然,结果可能是2-6,6-2,1-0[11-9]6-2,7-6[10-8]
最后我想到了:
=ARRAYFORMULA(REGEXEXTRACT($A$2:$A$3,"^(.*?) \((\d+)\) \/ (.*?) \((\d+)\)(.*?)(.*?) \((\d+)\) \/ (.*?) \((\d+)\)"))
但这并不像它应该的那样工作,将第一个球员的年龄与他的名字分开,其他球员和结果也不正确。因此,我尝试在每列中使用单独的公式:
=ArrayFormula(IFERROR(REGEXEXTRACT(A1:A, "(\d+-\d+,\s\d+-\d+|\d+-\d+,\s\d+-\d+,\s\d+-\d+|\d+-\d+,\s\d+-\d+,\s\d+-\d+,\s\d+-\d+)")))
其中|表示“或”,两组结果被抽象出来-但没有其他结果!
如果省略了任何球员的名字,那么公式应该在H列中报告“错误”。如果结果不完整,则还应在H列中报告“错误”。
我会喜欢一些人谁知道他们在做什么!

xtfmy6hx

xtfmy6hx1#

使用let()以分段方式构建正则表达式,这样过程更容易管理:

=let( 
  range, A1:A, 
  player, "([\w ]+? \(\d+\))", 
  team, player & " \/ " & player, 
  result, "([-, \d[\]]+)", 
  regex, team & result & team, 
  extract_, lambda(s, regexextract(s, regex)), 
  iserror_, lambda(s, if(iserror(s), "Error", iferror(1/0))), 
  data, map(range, extract_), 
  errors, map(choosecols(data, 1), iserror_), 
  { iferror(data), errors } 
)

参见let()lambda()map()
要对数组公式执行同样的操作,请使用以下正则表达式:

=arrayformula( regexextract( 
  A1:A, 
  "^([\w ]+? \(\d+\)) \/ ([\w ]+? \(\d+\))([-, \d[\]]+)([\w ]+? \(\d+\)) \/ ([\w ]+? \(\d+\))" 
) )

相关问题