正则表达式将所有内容都包含在内在同一行

时间:2013-11-27 07:31:08

标签: regex

我有这种情况。

| N / A
|开始新的流程
|测试

TEST1

TEST2

|你好
| < BR>
| < BR>
| http://google.com

''引号''

中的一些文字

|使用一些网址

我的要求是获得所有|在连续的行中连同文本。有些文字有了新的一行。

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

| N / A
|开始新的流程
| test test1 test2
|你好
| < BR>
| < BR>
| http://google.com''引号中的一些文字'' |使用一些URL

我尝试了一些正则表达式,但我无法完美地完成它。有人能指点我这样做吗。

更新

我在Windows中这样做

3 个答案:

答案 0 :(得分:1)

尝试用空格替换此模式:

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

你没有指定,所以我使用.NET风格的正则表达式。

这可以通过替换任意数量的CR和/或LF字符,然后替换管道以外的其他内容,然后使用单个空格替换零个或多个空格。这有效地连接非管道起始行并添加它连接行的空间。

[ ]*可以放在*(没有括号),我只是想在表达式中明确地调出我的空格字符。

测试:

http://refiddle.com/h04

答案 1 :(得分:0)

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

接下来就是使用.|* or .*|?。第一个是贪婪的,将匹配到你的字符串中的最后一个“句子”,第二个是懒惰的,将匹配到你的字符串中的下一个“句子”。 另外检查一下,我希望这对你有帮助......

答案 2 :(得分:0)

  

有些人在遇到问题时会想“我知道,我会用   正则表达式。“现在他们有两个问题。

我建议不要使用正则表达式,因为我发现它们没有必要。

为什么不读取行的文件行,每次行以管道(|)开头时,将其添加为数据结构中的新条目,例如可调整大小的数组,以及不以管道开头的行,你改为将文本添加到数组中的最后一个条目?

例如,这可以解决问题(在Perl,YMMV中):

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