Regex 正则表达式:提取行

Regex 正则表达式:提取行,regex,Regex,我尝试用正则表达式提取名称1(第一行)、名称2(第二行)、名称3(第三行)和街道名称(最后一行): Company Inc. JohnDoe Foobar Industrieterrein 13 最后一行是街道名称,该部分已经在工作(文本存储在变量“S2”中) 这个表达式将返回最后一行。我还能够提取第一行: REGEXREPLACE(S2, "(\n.*)", "") 我的问题是,我不知道如何提取第二行和第三行 另外,如何测试文本是否包含一行、两行、三行或更多行 更新: 正则表达式在Scri

我尝试用正则表达式提取名称1(第一行)、名称2(第二行)、名称3(第三行)和街道名称(最后一行):

Company Inc.
JohnDoe
Foobar
Industrieterrein 13
最后一行是街道名称,该部分已经在工作(文本存储在变量“S2”中)

这个表达式将返回最后一行。我还能够提取第一行:

REGEXREPLACE(S2, "(\n.*)", "")
我的问题是,我不知道如何提取第二行和第三行

另外,如何测试文本是否包含一行、两行、三行或更多行

更新


正则表达式在Scribe(ETL工具)的上下文中使用。问题是我不能执行源代码,我只有以下功能:

  • REGEXMATCH(输入,模式)
  • REGEXREPLACE(输入、模式、替换)

对于将匹配四行中每一行的正则表达式,这样如何:

(.*?)\n(.*?)\n(.*?)\n(.*)
括号将匹配,而\n将匹配新行。注意:您可能需要使用
\r\n
,而不仅仅是
\n
,具体取决于您的情况;两者都试试。

只需使用此正则表达式:

(.+)+
说明:

通配符:匹配除
\n
之外的任何单个字符

+
与上一个元素匹配一次或多次


如果正则表达式语言支持lookaheads,则可以向后计算行数,从而获得(假设
与换行符不匹配)


您可以尝试以下操作:


(.*)\n){3}

您使用的是什么编程语言?否则,我们如何知道如何测试有多少行?不需要正则表达式,至少不需要高级模式匹配-只需在换行符上拆分文本(使用您的语言提供的任何拆分实现)。这可能是比我的正则表达式解决方案@cbroe更好的答案正则表达式在Scribe(ETL工具)的上下文中使用。问题是我不能执行源代码,我只有以下函数:“REGEXMATCH(input,pattern)”和“REGEXREPLACE(input,pattern,replacement)”语言是否允许lookaheads?好的,因此使用这个表达式我可以测试文本是否包含1,2,3,。。。排。但是如何替换除第二行以外的所有行?根据您的答案猜测,类似于
REGEXREPLACE(S2),(.*?)\n(.*?)\n(.*?)\n(.*),“replaced\n\2\nreplace\nreplace”)
。2是一个反向引用。它应该代表正则表达式中的第二个括号。但根据编程语言的不同,它可能是不同的数字,也可能是
$2
。您好,我只能使用函数“REGEXREPLACE(输入、模式、替换)”。问题是:在这种情况下,我如何使用你们的表达?所以我需要的是“匹配除第二行之外的所有内容,并用空字符串重新拼凑”?@thuld我是否正确理解,您只想保留第二行?那么为什么不使用
REGEXREPLACE(REGEXREPLACE(输入“^..*\n”,”),“\n(\n |.*”,”)
-internal replace删除第一行,outer replace删除第一行之后的任何内容。是的,需求的一部分是第二行的摘录。明天我会测试你的推荐,谢谢你的帮助!最后一个问题:你同意这句话会保留第三行吗?REGEXREPLACE(REGEXREPLACE(REGEXREPLACE(输入,“^.*\n”,”),“^.*\n”,”,“\n(\n |.)*,”)
(.+)+
(.*)$                   # matching the last line
(.*)(?=(\n.*){1}$)      # matching the second last line (excl. newline)
(.*)(?=(\n.*){2}$)      # matching the third last line (excl. newline)