RegEx匹配段落

时间:2018-05-03 02:46:10

标签: regex parsing haskell alex

我无法弄清楚用于解析文本文件和识别段落的正确RegEx。

我现在有什么:

[\n\n]+  

示例文字:

  

Das Pensionat Klinger战争bereits etwas zusammengeschmolzen,als das   junge Ehepaar daselbst eintrat。 Es war ein unfreundlicher,regnerischer   Sommer gewesen。 Klagenüberall... aus der Schweiz - vom Salzkammergut   她,我的berüchtigte»Schnürlregen«tagaustageinherabgoß - 克拉根   vom Ostseestrande und aus dem Engadin ... Klagen endlich auch aus dem   在Süd-Bayern的lieblichen Gebirgsnest,在welchem mandurchschönes   湿润的sonstargverwöhnt战争。

     

Ein如此reizendesStückErde! Tief gelegen - hoch gelegen,wie man's   eben nehmen wollte,denn die zierlichen,wie aus der Spielzeugschachtel   genommenenHäuschenkletterten hier waghalsig die Berge empor,   versteckten sich dort eigenwilligunterbreitästigenObstbäumentiief   drunten im Thal。 Aber die Sonne fand sie alleundübergoßsiemit   breiten Strahlenfluten hellen Goldes,und der Bergwind,wie er frisch   undkühlvomGebirge herunterfuhr,strichdarüberind - und ringumher   griffen die Berge wie die Glieder einer gewaltigen Kette ineinander   ...einigegrün,dicht bewaldet,die anderen kahl und schroff,hoch   oben nurmitkümmerlichemFichtenwuchsbestanden,und etwelche unter   ihnen stolz zu den Wolken aufragend,ewigen Schnee auf dem Haupt,und   在den den Falten des Obergewandes blauschimmerndes Gletschereis!

我一直得到反馈,在行的最后我得到一个令牌,说TokenParagraph。

例如:

....并且[这是它错过了步骤]

修改:

尝试(\n|^).*?(?=\n|$)

我明白了,

为lexing-0.1.0.0预处理可执行文件'Main'.. Tokens.x:22:8:解析错误

%wrapper "basic"

$whiteSpace     = [\ \t \f \v \r]
$digit          = 0-9                                                                                     
$alpha          = [a-zA-Z]                          


tokens :-

  $whiteSpace+        ;
  $digit+             ;                              
  (\n|^).*\?(\?=\n|$)   { \s -> TokenParagraph  }  

1 个答案:

答案 0 :(得分:2)

  

我现在有什么:

<section id="app">...</section>

猜测:你希望这可以连续匹配两行的任意多个副本。但事实上[\n\n]+ 创建了一个字符类正则表达式,它只匹配一个字符(括号括起来的任何字符)。所以这匹配任何正数的换行符,包括只有一行。

它很容易修复,但正确的修复取决于你想要的确切内容。如果您希望任意数量的新行大于2作为段落分隔符,则可以尝试

[]

没有括号。或者,如果您需要多个段落分隔符,当有两个以上的换行符时,则可能

\n\n+

是你的意图。 (不是亚历克斯专家,我不记得括号是否需要转义;对不起。)