【问题标题】:RegEx match for paragraphs段落的正则表达式匹配
【发布时间】:2018-10-13 05:51:56
【问题描述】:

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

我目前拥有的:

[\n\n]+  

示例文本:

Das Pensionat Klinger war bereits etwas zusammengeschmolzen, als das junge Ehepaar daselbst eintrat。 Es war ein unfreundlicher, regnerischer 萨默格韦森。 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 在 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 dort eigenwillig unter breitästigen Obstbäumen tief 我喝醉了。 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 在 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  }  

【问题讨论】:

  • 我试过了,但收到解析错误..
  • 你能把错误粘贴到你的问题中吗?
  • 只是确认您使用的是haskell?
  • 是的,Haskell Alex.. 创建一个词法分析器

标签: regex parsing haskell alex


【解决方案1】:

我目前拥有的:

[\n\n]+

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

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

\n\n+

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

(\n\n)+

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

【讨论】:

  • 注意这不会匹配三行换行符;它只匹配偶数个\ns。如果您想要任何大于 2 的数字,那么 \n\n+ 就是您想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-05
  • 2012-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
相关资源
最近更新 更多