正则表达式:提取线条

时间:2013-05-28 07:52:37

标签: regex

我尝试使用正则表达式提取name1(第一行),name2(第二行),name3(第三行)和street-name(last-row):

Company Inc.
JohnDoe
Foobar
Industrieterrein 13

最后一行是街道名称,此部分已经工作(文本存储在变量“S2”中)。

REGEXREPLACE(S2, "(.*\n)+(?!(.*\n))", "")

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

REGEXREPLACE(S2, "(\n.*)", "")

我的问题是,我不知道如何提取第二行和第三行......

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

更新

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

  • REGEXMATCH(input, pattern)
  • REGEXREPLACE(input, pattern, replacement)

4 个答案:

答案 0 :(得分:3)

如果正则表达式语言提供对前瞻的支持,您可以向后计数行,从而得到(假设.与换行符不匹配)

(.*)$                   # matching the last line
(.*)(?=(\n.*){1}$)      # matching the second last line (excl. newline)
(.*)(?=(\n.*){2}$)      # matching the third last line (excl. newline)

答案 1 :(得分:1)

对于与四行中的每一行匹配的正则表达式,具体如何:

(.*?)\n(.*?)\n(.*?)\n(.*)

括号将匹配,\ n将匹配新行。注意:您可能必须使用\r\n而不仅仅是\n;试试这两个。

答案 2 :(得分:1)

只需使用此正则表达式:

(.+)+

解释

  

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

     

+ 的   匹配前一个元素一次或多次。

答案 3 :(得分:0)

您可以尝试以下操作:

((.*?)\n){3}