在一个单元格内对多行进行正则表达式提取
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-line
和 s
标志以匹配多行。以下将匹配单元格 A2 中多行的所有字符。
=REGEXEXTRACT(A2, "(?ms)^(.*)$")
REGEXEXTRACT(A1,"text1(?ms)(.*)text2")
因此,在这种情况下:
REGEXEXTRACT(A1,"<(?ms)(.*)>")
在 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-line
和 s
标志以匹配多行。以下将匹配单元格 A2 中多行的所有字符。
=REGEXEXTRACT(A2, "(?ms)^(.*)$")
REGEXEXTRACT(A1,"text1(?ms)(.*)text2")
因此,在这种情况下:
REGEXEXTRACT(A1,"<(?ms)(.*)>")