如何使用 REGEXTRACT 提取两个字符串之间的某些字符

How to use REGEXTRACT to extract certain characters between two strings

我正在尝试提取不同字符之间的人名。例如,单元格包含此信息

PATIENT: 2029985 - COLLINS, JUNIOR .
PATIENT: 1235231-02 - JERRY JR, PATRICK .
PATIENT: 986435--EXP-- - JULIUS, DANIEL .
PATIENT: 2021118-02 - DRED-HARRY, KEVIN .

我的目标是使用一个 REGEXTRACT 公式获得以下内容:

COLLINS, JUNIOR
JERRY JR, PATRICK
JULIUS, DANIEL
LOVE ALSTON, BRENDA

到目前为止,我想出了公式:

=ARRAYFORMULA(REGEXEXTRACT(B3:B, "-(.*)\."))

其中 B3 包含第一个信息

使用该公式,我得到:

COLLINS, JUNIOR
02 - JERRY JR, PATRICK
02 - LOVE-ALSTON, BRENDA 
-EXP-- - JULIUS, DANIEL
02 - DRED-HARRY, KEVIN

我设法记下了第一个名字,但我该如何提取其余的名字。

您可以使用

=ARRAYFORMULA(REGEXEXTRACT(B3:B, "\s-\s+([^.]*?)\s*\."))

regex demo详情:

  • \s-\s+ - 一个空格,-,一个或多个空格
  • ([^.]*?) - 第 1 组:除 . 之外的零个或多个字符尽可能少
  • \s* - 零个或多个空格
  • \. - 一个 . 字符。

第一个解决方案:使用您显示的示例,请尝试使用正则表达式。

Online demo for above regex

^PATIENT:.*-\s+([^.]*?)\s*\.

尝试关注Google-sheet论坛:

=ARRAYFORMULA(REGEXEXTRACT(B3:B, "^PATIENT:.*-\s+([^.]*?)\s*\."))

解释: 检查 line/value 是否从 PATIENT 开始,然后是 : 直到 - (这里使用贪心机制),后面跟着空格(出现 1 次或多次)。然后创建一个且唯一的捕获组,其中包含 .(dot) 之前的所有内容,使其成为非贪婪的,关闭捕获组,后跟空格(0 次或多次出现)后跟文字点。



第二个解决方案:在正则表达式中使用惰性匹配方法,请尝试使用正则表达式。

.*?\s-\s([^.]*?)\s*\.

Google-sheet公式如下:

=ARRAYFORMULA(REGEXEXTRACT(B3:B, ".*?\s-\s([^.]*?)\s*\."))

Online demo for above regex