2013-10-23 41 views
0

字符串我有以下字符串我試圖尋找:正則表達式具有可變空格和換行

<td></td> 
<td>)</td> 

可以有任意數量的</td><td>除換行符之間的空格。總是隻有一個換行符,但是一個簡單地忽略所有空格(包括換行符)的表達式都可以。

我想弄清楚如何使用此信息執行字符串替換沒有摺疊文件中的所有空白。我發現了許多解決方案,其中有一個處理空白的表達式,但是我也無法使用換行符進行處理。

我的正則表達式的經驗是有限的。我應該如何從bash shell環境中解決這個問題?

+0

之間是什麼? –

+0

使用dom [和xpath]來處理html文檔 – hek2mgl

+0

你還沒有確切地說明你想要替換什麼。如果你閱讀了正則表達式,例如'sed'或'awk',你會發現識別換行符的選項。 – lurker

回答

1

如果我理解正確的話,你想第一</td>和/或後匹配空<td>標籤對在新的一行,並在其中與一個右括號<td>標籤對(有空格的數量在第二個<td>之前)。如果這是正確的嘗試下面的表達式:

<td></td> *\n *<td>)</td> 

當心sed通常不支持多比賽,所以你需要做替換之前標籤工作,下一行追加到當前行(見here爲一個完整的解釋):

sed ':a;N;$!ba;s|<td></td> *\n *<td>)</td>|...|g' infile >outfile 

更換省略號(...)與您的實際替換文本。

+1

這工作完美。我不得不編輯一個錯字(!$應該是$!);仍在等待同行評審。 – Zhro

0
<td>\s*?\)?\s*?</td> 

這將匹配a和可選)以及標籤之間的任意數量的空白。 雖然我不確定,但它是否是您正在尋找的字符串?

但是,它的要點是使用\ s作爲包括換行符在內的空白字符類。

+0

無需使用不情願量詞IMO。 –

+0

可能的,但據我所知,將它們表達在這個表達式中也沒有什麼壞處。 –

+0

這取決於你正在匹配什麼,但他們可能會變慢。如果採取較短的比賽不是首選或者甚至是可能的,那麼最好堅持使用貪婪的量詞。在這種情況下'\\ s *?\''最短和最長可能的匹配總是相同的,不情願的量詞只會導致很多回溯。 –