Regex 正则表达式将所有内容放在两个|内的同一行中

Regex 正则表达式将所有内容放在两个|内的同一行中,regex,Regex,我有这样的情况 |不适用 |启动新流程 |试验 测试1 测试2 |你好 | | | “引号内的一些文本” |使用一些URL 我的要求是将所有的|与文本连成一行。有些文本有新行 这就是我想要的文本在使用正则表达式后的样子 |不适用 |启动新流程 |测试1测试2 |你好 | | |“引号内的一些文本” |使用一些URL 我尝试了一些正则表达式,但我无法做到完美。有人能告诉我怎么做吗 更新: 我正在Windows中执行此操作尝试用空格替换此模式: [\r\n]+(?!\|)[ ]* 您没有指定,所以

我有这样的情况

|不适用
|启动新流程
|试验

测试1

测试2

|你好
|

|

|

“引号内的一些文本”

|使用一些URL

我的要求是将所有的|与文本连成一行。有些文本有新行

这就是我想要的文本在使用正则表达式后的样子

|不适用
|启动新流程
|测试1测试2
|你好
|

|

|“引号内的一些文本”
|使用一些URL

我尝试了一些正则表达式,但我无法做到完美。有人能告诉我怎么做吗

更新:


我正在Windows中执行此操作

尝试用空格替换此模式:

[\r\n]+(?!\|)[ ]*
您没有指定,所以我使用.NET样式的正则表达式

其工作原理是将任意数量的CR和/或LF字符后跟管道以外的其他字符,然后后跟零个或多个空格,并使用单个空格。这将有效地连接非管道起点线,并在其连接线的位置添加空间

[]*
可以作为
*
(没有括号),我喜欢在表达式中显式调用空格字符

测试:


这里重要的一点是,激活正则表达式引擎的“dotall”模式,以便。正在匹配新线。但如何做到这一点取决于您的正则表达式引擎

接下来,如果您使用
|*或。*|?
。第一个是贪婪的,将匹配到字符串中的最后一个“句子”,第二个是懒惰的,将匹配到字符串中的下一个“句子”。 也检查在这,我希望这将帮助你

有些人在遇到问题时会想:“我知道,我会用 现在他们有两个问题

我建议不要使用正则表达式,因为我发现它们不是必需的

为什么不逐行读取文件行,每次该行以管道(|)开头时,将其作为新条目添加到数据结构(如可调整大小的数组)中,而对于不以管道开头的行,则将文本添加到数组中的最后一个条目中

例如,这将实现以下功能(在Perl中,YMMV):


谢谢@richardtallent您的解决方案奏效了。不过,我对它进行了调整和定制,以供我使用。
foreach (@rawlines) {
        push(@formattedlines,$_) if /^\|/;
        $formattedlines[-1]="$formattedlines[-1]$_" if not /^|/;
}