I can not figure out the correct RegEx to use for parsing a text file and identifying paragraphs.
What I currently have:
[\n\n]+
Sample Text:
Das Pensionat Klinger war bereits etwas zusammengeschmolzen, als das junge Ehepaar daselbst eintrat. Es war ein unfreundlicher, regnerischer Sommer gewesen. Klagen überall ... aus der Schweiz -- vom Salzkammergut her, wo der berüchtigte »Schnürlregen« tagaus tagein herabgoß -- Klagen vom Ostseestrande und aus dem Engadin ... Klagen endlich auch aus dem lieblichen Gebirgsnest in Süd-Bayern, in welchem man durch schönes Wetter sonst arg verwöhnt war.
Ein so reizendes Stück Erde! Tief gelegen -- hoch gelegen, wie man's eben nehmen wollte, denn die zierlichen, wie aus der Spielzeugschachtel genommenen Häuschen kletterten hier waghalsig die Berge empor, versteckten sich dort eigenwillig unter breitästigen Obstbäumen tief drunten im Thal. Aber die Sonne fand sie alle und übergoß sie mit breiten Strahlenfluten hellen Goldes, und der Bergwind, wie er frisch und kühl vom Gebirge herunterfuhr, strich darüber hin -- und ringsumher griffen die Berge wie die Glieder einer gewaltigen Kette ineinander ... einige grün, dicht bewaldet, die anderen kahl und schroff, hoch oben nur mit kümmerlichem Fichtenwuchs bestanden, und etwelche unter ihnen stolz zu den Wolken aufragend, ewigen Schnee auf dem Haupt, und in den Falten des Obergewandes blauschimmerndes Gletschereis!
I keep getting feedback that at the end of the line I am getting a token back saying TokenParagraph.
For example:
.... and there is a [this is where it miss steps]
Edit:
When trying (\n|^).*?(?=\n|$)
I get,
Preprocessing executable 'Main' for lexing-0.1.0.0.. Tokens.x:22:8: parse error
%wrapper "basic"
$whiteSpace = [\ \t \f \v \r]
$digit = 0-9
$alpha = [a-zA-Z]
tokens :-
$whiteSpace+ ;
$digit+ ;
(\n|^).*\?(\?=\n|$) { \s -> TokenParagraph }
What I currently have:
[\n\n]+
At a guess: you are expecting this to match arbitrarily many copies of two lines in a row. But in fact []
create a character class regex, which only ever matches one character (any of the ones enclosed by the brackets). So this matches any positive number of newlines, including just one.
It's easy to fix, though the right fix depends on exactly what you want. If you want any number of newlines greater than two to be a paragraph separator, you could try
\n\n+
without brackets. Or, if you want multiple paragraph separators when there are more than two newlines, then perhaps
(\n\n)+
is what you intended. (Not being an alex expert, I can't remember whether parentheses need to be escaped; sorry about that.)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With