我只需要将特定字符串拆分为数字,然后从 Google 工作表中的特定字符串中最大化这些数字?
I would need to split only specific strings to numbers and then maximize these numbers from the specific strings in Google sheets?
我的 google sheet 散布 sheet 个单元格的示例
1
AAA C1
BBB C4
AAA C7
A1:“AAA C1”
B1:“BBB C4”
C1:“AAA C7”
我需要最大化所有以“AAA”开头的字符串中字母“C”之后的最高数字。我只是通过使用公式达到最大化“C”之后的所有数字:
=Max(ARRAYFORMULA(VALUE(REGEXREPLACE(a1:c1,"[^[:digit:]]", ""))))
然而,使用上面的公式我无法 select 仅以“AAA”开头的字符串。我试过函数 =maxifs,但它不允许将诸如 MID 之类的字符串函数应用于单元格范围。
这是我的第一个问题,我希望一切都清楚,并且有人可以帮助我解决这个问题。
谢谢!
我认为您只需要更改您的 REGEX 表达式。
^A{3}[^A].*?C(?=\d+)
^A{3}[^A]
: 刚好以三个大写开头 A
.*?C
: 找到第一个大写 C
(?=\d+)
: C
后跟至少一个数字。
这将提取您要用
空字符串替换的部分。
例如AAA C1
将提取 AAA C
,替换后将只留下 1
。
建议的解决方案 #1:
=Max(ARRAYFORMULA(VALUE(REGEXREPLACE(FILTER(A1:C1,ISNUMBER(SEARCH("AAA",A1:C1))),"[^[:digit:]]", ""))))
我基本上保留了您原来的公式,因为您已经按原样理解了它。我所做的只是用那个范围的 FILTER
替换你的范围。
FILTER
单独 — FILTER(A1:C1,ISNUMBER(SEARCH("AAA",A1:C1)))
— 仅保留搜索“AAA”导致位置编号的范围内的那些条目(即,“AAA”的所有匹配项与其他任何内容一样导致错误)。
如果“AAA”必须出现在字符串的最前面,您可以使用这个版本:
=Max(ARRAYFORMULA(VALUE(REGEXREPLACE(FILTER(A1:C1,SEARCH("AAA",A1:C1)=1),"[^[:digit:]]", ""))))
建议的解决方案 #2:
=Max(ARRAYFORMULA(IFERROR(VALUE(REGEXEXTRACT(A1:C1,"^AAA.+(\d+)$")),-9^9)))
这将从 REGEXEXTRACT
中找到仅匹配“AAA”单元格的最大值。如果某些东西与“AAA”模式不匹配,IFERROR
将 return 一个非常高的负数(这将排除那些永远成为 MAX
的人)。
尝试:
=MAX(INDEX(1*IFNA(REGEXEXTRACT(A1:C1; "^AAA.+(\d+)"))))
你提到:
...maximize the highest numbers after the letter "C" from all the strings that start with "AAA".
提到的答案适用于一行。
如果您想在更复杂的情况下将其应用于任何行范围,您可以使用
=MAX(INDEX(IFERROR(
REGEXEXTRACT(FLATTEN(A1:C),"^AAA .*C(\d+)")+0)))
我的 google sheet 散布 sheet 个单元格的示例
1 | AAA C1 | BBB C4 | AAA C7 |
A1:“AAA C1” B1:“BBB C4” C1:“AAA C7”
我需要最大化所有以“AAA”开头的字符串中字母“C”之后的最高数字。我只是通过使用公式达到最大化“C”之后的所有数字:
=Max(ARRAYFORMULA(VALUE(REGEXREPLACE(a1:c1,"[^[:digit:]]", ""))))
然而,使用上面的公式我无法 select 仅以“AAA”开头的字符串。我试过函数 =maxifs,但它不允许将诸如 MID 之类的字符串函数应用于单元格范围。
这是我的第一个问题,我希望一切都清楚,并且有人可以帮助我解决这个问题。
谢谢!
我认为您只需要更改您的 REGEX 表达式。
^A{3}[^A].*?C(?=\d+)
^A{3}[^A]
: 刚好以三个大写开头A
.*?C
: 找到第一个大写C
(?=\d+)
:C
后跟至少一个数字。
这将提取您要用
空字符串替换的部分。
例如AAA C1
将提取 AAA C
,替换后将只留下 1
。
建议的解决方案 #1:
=Max(ARRAYFORMULA(VALUE(REGEXREPLACE(FILTER(A1:C1,ISNUMBER(SEARCH("AAA",A1:C1))),"[^[:digit:]]", ""))))
我基本上保留了您原来的公式,因为您已经按原样理解了它。我所做的只是用那个范围的 FILTER
替换你的范围。
FILTER
单独 — FILTER(A1:C1,ISNUMBER(SEARCH("AAA",A1:C1)))
— 仅保留搜索“AAA”导致位置编号的范围内的那些条目(即,“AAA”的所有匹配项与其他任何内容一样导致错误)。
如果“AAA”必须出现在字符串的最前面,您可以使用这个版本:
=Max(ARRAYFORMULA(VALUE(REGEXREPLACE(FILTER(A1:C1,SEARCH("AAA",A1:C1)=1),"[^[:digit:]]", ""))))
建议的解决方案 #2:
=Max(ARRAYFORMULA(IFERROR(VALUE(REGEXEXTRACT(A1:C1,"^AAA.+(\d+)$")),-9^9)))
这将从 REGEXEXTRACT
中找到仅匹配“AAA”单元格的最大值。如果某些东西与“AAA”模式不匹配,IFERROR
将 return 一个非常高的负数(这将排除那些永远成为 MAX
的人)。
尝试:
=MAX(INDEX(1*IFNA(REGEXEXTRACT(A1:C1; "^AAA.+(\d+)"))))
你提到:
...maximize the highest numbers after the letter "C" from all the strings that start with "AAA".
提到的答案适用于一行。
如果您想在更复杂的情况下将其应用于任何行范围,您可以使用
=MAX(INDEX(IFERROR(
REGEXEXTRACT(FLATTEN(A1:C),"^AAA .*C(\d+)")+0)))