2013-11-27 52 views
0

我有這樣的情況。正則表達式將所有內容都包含在內| |在同一行

| N/A
|開始一個新的過程
|測試

test1的

test2的

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

'

「,引號裏的一些文字' |使用一些URL

我的要求是獲取所有|與文本一起連續排列。有些文字正在換行。

這就是我想要使用正則表達式後的文本

| N/A
|開始一個新的過程
| test test1 test2
|你好
| < br>
| < br>
| http://google.com''引號中的一些文字''
|使用一些URL

我嘗試了一些正則表達式,但我無法完美地完成它。有人能指點我一些方法來做到這一點。

更新:

我在Windows這樣

回答

0

嘗試用空間代替這種模式:

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

你沒有指定,所以我使用.NET樣式常用表達。

這可以通過替換任意數量的CR和/或LF字符,後面跟一個非管道的東西,然後再加上零個或多個空格,並使用一個空格。這有效地加入了非管道開始線並增加了它加入線的空間。

[ ]*只能作爲*(無括號),我只是想在表達式中顯式調用空格字符。

測試:

http://refiddle.com/h04

+0

感謝@richardtallent您的解決方案工作。雖然我調整和定製了它供我使用。 –

0

這裏最重要的是,你激活你的正則表達式引擎的「DOTALL」模式,從而使。與換行符匹配。但你如何做到這一點取決於你的正則表達式引擎。

接下來就是如果您使用.|* or .*|?。第一個是貪婪的,會匹配到字符串中的最後一個「句子」,第二個是懶惰的,會匹配到字符串中的下一個「句子」。 還要檢查它在此,我希望這將幫助你......

0

一些人,當遇到一個問題,認爲「我知道,我將使用 正則表達式。」現在他們有兩個問題。

我建議不要用正則表達式來做這件事,因爲我發現它們不是必需的。

爲什麼不讀取行的文件行,並且每當行開始使用管道(|)時,將其添加爲數據結構(如可調整大小的數組)中的新條目,並且對於不以管道,而是將文本添加到數組中的最後一項?

此,例如,會做的伎倆(Perl中,情況因人而異):

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