6

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

我目前拥有的:

[\n\n]+  

示例文本:

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 战争。

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 dorteigenwillig 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!

我不断收到反馈,在行尾我收到了一个令牌,说 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  }  
4

1 回答 1

2

我目前拥有的:

[\n\n]+

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

它很容易修复,尽管正确的修复完全取决于您想要什么。如果您希望任何数量大于 2 的换行符作为段落分隔符,您可以尝试

\n\n+

没有括号。或者,如果在有两个以上换行符时需要多个段落分隔符,那么也许

(\n\n)+

是你想要的。(不是 alex 专家,我不记得括号是否需要转义;对此感到抱歉。)

于 2018-05-03T17:35:28.380 回答