2012-02-17 37 views
0

無法弄清楚如何爲以下內容構建替換模式。替換前導空格並在特定字符前終止匹配

我有類似下面的線的陣列:

<span> code <span> code <span/> code </span> 
    <span> code <span> code <span/> code </span> 
    <span> code <span> code <span/> code </span> 
     <span> code <span> code <span/> code </span> 

有在每個行的開始的空間。它可能是一個空格,或者兩個空格或N個空格。 此外,線路本身可能有空間。

需要什麼,是在第一個<字符之前,只在行首開始替換空格。 每個空間應該被取代以&nbsp;

所以,如果有1個空格字符 - 它應該被取代以&nbsp;如果有2位 - 應&nbsp;&nbsp;基本上,N空格字符應當被取代爲N &nbsp;

我可以用代碼來做到這一點,但這不是最優的。 我試圖純粹與正則表達式,但無法弄清楚如何構建適當的模式。

歡迎使用任何語言(Ruby,C#,Python,Perl)進行替換。

P.S.我正在逐行處理,所以建立替換模式就足夠了,它將在單行的邊界內工作。

P.P.S.我看起來很近,但仍然無法弄清楚如何在第一個<之後停止更換空間。

回答

1

在C#中,這是沒有問題的

String s = " <span> code <span> code <span/> code </span>"; 
Console.WriteLine(Regex.Replace(s, @"(?<=^\s*)\s", "&nbsp;")); 

來替換空白字符,但前提是隻有空白字符和字符串之前開始。

但所有其他語言不支持變長lookbehind。

+0

真棒。任何人都知道如何在Ruby中做到這一點? – 2012-02-17 10:50:31

0

雙GSUB在紅寶石:

str = " <span> code <span> code <span/> code </span>" 
p str.gsub(/^ +/){|m| m.gsub(' ', '&nbsp;')} 
#=> "&nbsp;&nbsp;&nbsp;&nbsp;<span> code <span> code <span/> code </span>" 
相關問題