正则表达式合并所有段落的所有行,同时将这些段落分隔开

时间:2018-09-08 10:28:01

标签: regex

我有以下文字:

Paragraph1

Paragraph2
Paragraph2
Paragraph2
Paragraph2

Paragraph3
Paragraph3

Paragraph4

我想合并每个段落的所有行,同时使这些段落分开。

暂时我要经历3个连续步骤

1)我首先用\n(?!\n)替换为空格

结果是:

 Paragraph1
 Paragraph2 Paragraph2 Paragraph2 Paragraph2
 Paragraph3 Paragraph3
 Paragraph4 

我合并了每个段落的所有行,但剩下两个问题:

2)我必须删除段落开头的空白

然后我用^\s替换为空,得到:

Paragraph1
Paragraph2 Paragraph2 Paragraph2 Paragraph2
Paragraph3 Paragraph3
Paragraph4 

3)然后,我必须在“合并的段落”之间插入空白行,将\n替换为\n\n,这样最终会得到我想要的结果:

Paragraph1

Paragraph2 Paragraph2 Paragraph2 Paragraph2

Paragraph3 Paragraph3

Paragraph4 

是否可以用一个正则表达式替换这三步设备?

预先感谢

3 个答案:

答案 0 :(得分:3)

如果段落始终以字母字符开头和结尾,则可以使用

await Bar.query()
  .allowInsert('[foo]')
  .upsertGraph({ data: 'todo', num: 3, desc: 'bla', [{ id: 1 }]}, { relate: true });

并替换为空字符串。

也就是说,如果换行符之前的位置和换行符之后的位置都是单词边界,则将删除换行符。否则,如果至少一个不是单词边界,则表明您在段落之间。

https://regex101.com/r/jsfzph/2

答案 1 :(得分:0)

如果我们用一个空格替换没有在换行符之前也不在换行符之后的换行符,则可以得到所需的输出。考虑以下正则表达式模式:

(?<!\n)\n(?!\n)

,然后用单个空格替换。这是一个有效的Java代码段。

String input = "Paragraph1\n\nParagraph2\nParagraph2\nParagraph2\nParagraph2\n\nParagraph3\nParagraph3\n\nParagraph4";
input = input.replaceAll("(?<!\n)\n(?!\n)", " ");
System.out.println(input);

Paragraph1

Paragraph2 Paragraph2 Paragraph2 Paragraph2

Paragraph3 Paragraph3

Paragraph4

Demo

答案 2 :(得分:0)

您可以使用否定的前瞻来断言(?!^$)不是空行。然后断言后面是换行符,后面没有空格字符(?=\n\S)。如果是这种情况,请匹配换行符\n,并用空格替换。

如果您的段落为Paragraph3 (test)

,这也将匹配

(?!^$)(?=\n\S)\n

Regex demo