.NET RegEx - First N chars of First M lines
- by George
Hello!
I want 4 general RegEx expressions for the following 4 basic cases:
Up to A chars starting after B chars from start of line on up to C lines starting after D lines from start of file
Up to A chars starting after B chars from start of line on up to C lines occurring before D lines from end of file
Up to A chars starting before B chars from end of line on up to C lines starting after D lines from start of file
Up to A chars starting before B chars from end of line on up to C lines starting before D lines from end of file
These would allow to select arbitrary text blocks anywhere in the file.
So far I have managed to come up with cases that only work for lines and chars separately:
(?<=(?m:^[^\r]{N}))[^\r]{1,M} = UP
TO M chars OF EVERY LINE, AFTER FIRST
N chars
[^\r]{1,M}(?=(?m:.{N}\r$))
= UP TO M chars OF EVERY LINE, BEFORE LAST N chars
The above 2 expressions are for chars, and they return MANY matches (one for each line).
(?<=(\A([^\r]*\r\n){N}))(?m:\n*[^\r]*\r$){1,M} = UP TO M lines AFTER FIRST N lines
(((?=\r?)\n[^\r]*\r)|((?=\r?)\n[^\r]+\r?)){1,M}(?=((\n[^\r]*\r)|(\n[^\r]+\r?)){N}\Z) = UP TO M lines BEFORE LAST N lines from end
These 2 expressions are equivalents for the lines, but they always return just ONE match.
The task is to combine these expressions to allow for scenarios 1-4. Anyone can help?
Note that the case in the title of the question, is just a subclass of scenario #1, where both B = 0 and D = 0.
EXAMPLE:
SOURCE:
line1 blah 1
line2 blah 2
line3 blah 3
line4 blah 4
line5 blah 5
line6 blah 6
DESIRED RESULT: Characters 3-6 of lines 3-5: A total of 3 matches:
<match>ne3 </match>
<match>ne4 </match>
<match>ne5 </match>