正则表达式匹配段落

6

我无法找到正确的正则表达式来解析文本文件并识别段落。

目前我的代码:

[\n\n]+  

示例文本:

当年年轻的夫妇进入克林格尔旅馆时,它已经有些陈旧了。那是一个不友好、多雨的夏天。到处都是抱怨...来自瑞士——从萨尔茨卡默古特(Salzkammergut)流传而来的臭名昭著的“绳索雨”——来自波罗的海海岸和恩加丁......最后也有来自巴伐利亚南部山区的美丽小镇的抱怨,在那里人们通常被美丽的天气所宠爱。

如此迷人的一块土地!无论是在低处还是在高处,因为这些精美的房屋仿佛是从玩具盒子里取出来的,这里它们勇敢地爬上山脉,那里它们固执地藏在深深的果树下面。但阳光照耀着它们,并用宽阔的金色光芒洒满它们,新鲜而凉爽的山风从山上吹来,拂过它们——四周的山峰像座强大锁链的环节一样紧密相连......有些绿色、茂密的丛林,有些高耸峻岭却只长着小而稀疏的云杉,还有一些山峰在云端中壮观地屹立,头上覆盖着永久的积雪,衣褶之间闪现着蓝色的冰川!

我一直收到反馈,说在行的末尾得到一个标记,标记为TokenParagraph。

例如:

.... 然后出现了 [这是它失误的位置]

编辑:

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

我得到了:

为了对lexing-0.1.0.0进行预处理...... 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  }  

2
可能是如何使用正则表达式匹配文本中的段落的重复问题。 - Sufiyan Ghori
1
我尝试过,但是收到了一个解析错误。 - mjosh
能否把错误信息粘贴在你的问题中? - Sufiyan Ghori
是的,Haskell Alex..正在创建词法分析器。 - mjosh
你能否尝试使用这个替代方案?(\n|^).*?(?=\n|$) - Sufiyan Ghori
显示剩余3条评论
1个回答

1

What I currently have:

[\n\n]+
大概是这样的:您希望它匹配任意数量的两行文本,但实际上[]创建了一个字符类正则表达式,只能匹配一个字符(括号内的任何字符)。因此,它匹配任意数量的换行符,包括一个换行符。
不过很容易修复,具体修复取决于您想要什么。如果您想要大于两个换行符的任意数量作为段落分隔符,可以尝试:
\n\n+

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

(\n\n)+

这是您想要的内容。(作为非Alex专家,我无法记住括号是否需要转义;对此我感到抱歉。)


请注意,这不会匹配三行换行符;它只匹配偶数个“\n”。如果您想要大于两个的任何数量,则应使用“\n\n+”。 - AJF

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接