匹配一个换行符,但不是两个

时间:2014-12-18 20:51:52

标签: regex notepad++

我正在尝试匹配所有未跟随其他换行符的换行符,以便我可以将第一个换行符转换为空格,但仍保持段落分隔,以便:

Lorem ipsum dolor sit amet, consectetur adipiscing elit
 sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua. Ut enim ad minim veniam, quis nostrud exercitation 


ullamco laboris nisi ut aliquip ex ea 
commodo consequat. Duis aute irure dolor 
in reprehenderit in voluptate velit esse 


cillum dolore eu fugiat nulla pariatur. 
Excepteur sint occaecat cupidatat

将转换为:

Lorem ipsum dolor sit amet, consectetur adipiscing elit  sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation 


ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse 


cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat

到目前为止,我有.*?\r\n(?<!(\r\n)),我觉得它非常接近,但我似乎无法做到这一点。任何帮助表示赞赏。感谢。

2 个答案:

答案 0 :(得分:6)

使用正则表达式\r?\n(?!\r?\n)。您可以找到在线解释和演示here

此正则表达式使用negative lookahead来确保换行后跟另一个换行符。换行符与\r?\n匹配以符合标准,因为某些换行符由回车符(\r)后跟换行符(\n)表示,而其他换行符则< em>只是换行符。

答案 1 :(得分:4)

找到一个单独的换行符的唯一真正方法是在两个非空格字符之间找到它 任何其他方式,事实证明它可能与任何数量的换行符接壤 所以,你不能只看一种方式而不是另一种方式,无论你看哪种方式都可以 填充不间断的空白,所以你最好这样做。

最简单的是做一个全球性的 查找:(\S[^\S\r\n]*)\r\n([^\S\r\n]*\S)
替换:$1 $2(&lt; -that&#39;捕获组1&#39; +&#39;空间&#39; +&#39;捕获组2&#39;)

 ( \S [^\S\r\n]* )             # (1)
 \r \n 
 ( [^\S\r\n]* \S )             # (2)

额外信息

此外,捕捉组可以用环顾四周替换 以及修剪虚假的非线性空白。

查找:(?<=\S)[^\S\r\n]*\r\n[^\S\r\n]*(?=\S)
替换:(&lt; - 那是一个空格)

 (?<= \S )
 [^\S\r\n]* \r \n [^\S\r\n]* 
 (?= \S )