2010-11-19 33 views
1

好了,所以我有以下的輸出:Java的正則表達式的幫助 - 白色空間是殺害我

<p style="margin-top: 0"> 

</p> 

,我想用<br />更換。我有以下代碼:

string.replaceAll("<p([^>]*)></p>","<br/>"); 

我需要什麼,以取代只有那些空白段落標記>和<標籤之間放?也就是說,它們之間沒有字符或數字。

感謝

+0

這是ASCII數據還是UTF-8數據? – tchrist 2010-11-19 04:44:11

+5

強制性引用http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – 2010-11-19 04:47:25

+0

大衛鏈接到的摘要:不要在HTML/XML – 2010-11-19 04:52:23

回答

1
string.replaceAll("<p([^>]*)>\\s+?</p>","<br/>"); 

應處理大多數情況下。這是一個非貪婪的重複,至少需要一個空白字符。當然,使用HTML解析器會產生更一致的結果。

+0

這也適用於需要,並且似乎更安全一些。謝謝。 – Samsquanch 2010-11-19 05:01:27

+0

我不可能看到一個最小的vs最大的ASCII空白匹配會給你買什麼。另外,我的HTML頁面經常充滿'\ x85'和'\ xA0'字符。你知道,Javs的'\ s'實現已被破壞。 – tchrist 2010-11-19 05:03:54

+0

「更安全」?我想我會去加入克蘇魯人羣。嘖! – tchrist 2010-11-19 05:04:56

1

使用此方法:

string.replaceAll("<p([^>]*)>\\s*</p>", "<br/>"); 
+0

這是一個非常天真的正則表達式。你必須[更加小心](http://stackoverflow.com/questions/4044946/regex-to-split-html-tags/4045840#4045840),以保持正確的做法。 – tchrist 2010-11-19 04:53:13

+0

謝謝。我嘗試過'\\ s',但沒有想到在*中加入。 – Samsquanch 2010-11-19 04:58:22

+0

@ user485418:上次我查了,Java的'\ s'只對ASCII數據有用。希望這就是你得到的。 – tchrist 2010-11-19 05:00:34