我正在尝试匹配所有未跟随其他换行符的换行符,以便我可以将第一个换行符转换为空格,但仍保持段落分隔,以便:
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))
,我觉得它非常接近,但我似乎无法做到这一点。任何帮助表示赞赏。感谢。
答案 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 )