regex 正则表达式将所有内容都限制在2以内|在同一行

yqyhoc1h  于 2023-05-08  发布在  其他
关注(0)|答案(3)|浏览(112)

我也遇到过这种情况。

| N/A<br>
| Start a new process<br>
| test
 
test1
test2<br>

| hello<br>
| < br><br>
| http://google.com

''Some text inside quotes''
| Use some URL

我的要求是|在文本沿着连续行中。某些文本有一个新行。
这就是我希望文本在使用正则表达式后的样子

| N/A<br>
| Start a new process<br>
| test test1 test2<br>
| hello<br>
| < br><br>
| < br><br>
| http://google.com ''Some text inside quotes''<br>
| Use some URL<br>

我尝试了一些正则表达式,但我无法完美地完成它。有人能告诉我怎么做吗。
我在Windows中执行此操作

093gszye

093gszye1#

尝试将此模式替换为空格:

[\r\n]+(?!\|)[ ]*

您没有指定,所以我使用. NET风格的正则表达式。
其工作原理是用单个空格替换任意数量的CR和/或LF字符,后跟管道以外的字符,然后后跟零个或多个空格。这有效地连接了非管道开始的行,并在连接行的位置添加了空间。
[ ]*可以写成*(没有括号),我只是喜欢在表达式中显式调用空格字符。

jmp7cifd

jmp7cifd2#

这里重要的是激活正则表达式引擎的“dotall”模式,这样。匹配换行符。但如何做到这一点取决于您的正则表达式引擎。
如果你使用.|* or .*|?。第一个是贪婪的,将匹配到字符串中的最后一个“句子”,第二个是懒惰的,将匹配到字符串中的下一个“句子”。也在这里面查一下,希望对你有帮助……

5f0d552i

5f0d552i3#

有些人在遇到问题时会想“我知道,我会用正则表达式。”
我建议不要用正则表达式来做这件事,因为我发现它们不是必需的。
为什么不一行一行地读取文件,并且每次该行确实以管道(|),你将它作为一个新的条目添加到一个数据结构中,比如一个可调整大小的数组,而对于不是以管道开头的行,你将文本添加到数组的最后一个条目中?
例如,这将完成以下操作(在Perl,YMMV中):

foreach (@rawlines) {
        push(@formattedlines,$_) if /^\|/;
        $formattedlines[-1]="$formattedlines[-1]$_" if not /^|/;
}

相关问题