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 /^|/;
}