在一个单元格内对多行进行正则表达式提取

Regexextract over multiple lines within one cell

在 Google 表格中,我在一个单元格中有这个:

Random stuff blah blah 123456789
<Surname, Name><123456><A><100><B><200>
<Surname2, Name2><456789><A><300><B><400>
Some more random stuff

并想匹配 <> 括号内的字符串。使用 = REGEXEXTRACT(A4, "<(.*)>") 我到目前为止:

Surname, Name><123456><A><100><B><200

很好,但这只是第一行。所需的输出将是这样的(可能包括 beginning/end 处的 <>,这并不重要):

Surname, Name><123456><A><100><B><200>
<Surname2, Name2><456789><A><300><B><400

或者简单地说:

Surname, Name><123456><A><100><B><200><Surname2, Name2><456789><A><300><B><400

怎么去?

请尝试:

=SUBSTITUTE(regexextract(substitute(A4,char(10)," "),"<(.*)>"),"> <",">"&char(10)&"<")

从中间开始,substitute 将换行符 (char(10)) 替换为 space。这使得 regexextract 可以处理完整的(即多行)字符串,其模式与 OP 已经熟悉的模式相同。 SUBSTITUTE 然后用换行符恢复相关的 space(标识为立即被 >< 包围)。

Google 张使用 RE2 syntax。您可以设置 multi-lines 标志以匹配多行。以下将匹配单元格 A2 中多行的所有字符。

=REGEXEXTRACT(A2, "(?ms)^(.*)$")
REGEXEXTRACT(A1,"text1(?ms)(.*)text2")

因此,在这种情况下:

REGEXEXTRACT(A1,"<(?ms)(.*)>")