thuld
thuld

Reputation: 680

Regular Expression: Extract the lines

I try to extract the name1 (first-row), name2 (second-row), name3 (third-row) and the street-name (last-row) with regex:

Company Inc.
JohnDoe
Foobar
Industrieterrein 13

The very last row is the street name and this part is already working (the text is stored in the variable "S2").

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

This expression will return me the very last line. I am also able the extract the first row:

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

My problem is, that I do not know how to extract the second and third row....

Also how do I test if the text contains one, two, three or more rows?

Update:

The regex is used in the context of Scribe (a ETL tool). The problem is I can not execute sourcecode, I only have the following functions:

Upvotes: 2

Views: 20529

Answers (4)

mrres1
mrres1

Reputation: 21

You can try the following:

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

Upvotes: 1

Howard
Howard

Reputation: 39217

If the regex language provides support for lookaheads you may count rows backwards and thus get (assuming . does not match newline)

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

Upvotes: 6

Ria
Ria

Reputation: 10357

just use this regex:

(.+)+

explain:

. Wildcard: Matches any single character except \n.

+ Matches the previous element one or more times.

Upvotes: 2

bozdoz
bozdoz

Reputation: 12890

As for a regular expression that will match each of four rows, how about this:

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

The parentheses will match, and the \n will match a new line. Note: you may have to use \r\n instead of just \n depending; try both.

Upvotes: 1

Related Questions