2011-10-03 51 views
3

我有一個網站更新,每個p元件到一個textarea轉換,在該內容的用戶類型則每個文本區域被轉換回p &我搶所得HTML &商店在我的SQL數據庫中。正則表達式以除去底線空間圖案

我的問題:在Internet Explorer中,當我去抓取HTML返回時,它稍微改變了html。例如:

// From this originally 
<img id="headingpic"/><div id="myContent"> 

// To this 
<img id="headingpic"/> 
<div id="myContent"> 

這很重要,因爲現在在顯示器存在IMG &下面在div之間的垂直間隙。

有時IE會插入一個「\ n」,有時候它是一個「\ n」,有時它只是一個「\ n」。我試圖提出一個正則表達式來刪除這些結束符(&間距),無論它們的模式如何。我有很多難題提出正則表達式,他們對我來說似乎很神祕。

如果我解釋我的算法,你可以建議在正則表達式中實現這個功能的「字符」?

  • 對於每一個「>」字符:忽略任何WHITEPACE或ENDLINE字符,如果下一個字符是一個「<」然後繼續
  • 對於後面「<」如果不是==「>」刪除所有的字符它(或者用「」代替)

我試圖做到這一點在JavaScript或Python的:

# Python: should I use replace for this? Would my regular expression look something like this? 
HTML_CONTENT.replace("^[ \t\n\r]") # this removes all whitespace as far as I know 

回答

0

我會去了解這個以不同的方式:

首先按行分開。

html_content_list = HTML_CONTENT.split("\n"); // Split by line; 

然後移除所有的空格就結束了.trim()(假設我們所談論的字符串,每一行,測試空第一)

for(var i in html_content_list) 
{ 
    html_content_list[i] = html_content_list[i].trim(); 
} 

那麼如果它確實需要一個新行它添加在最後:

html_content_list.join("\n"); 
0

你的正則表達式需要一些更多的字符,或\ S:

HTML_CONTENT.replace("^[ \t\n\r\f\v]") 

或者

HTML_CONTENT.replace("^[\s]") 

\ v匹配一個垂直製表\ u000B。

\ f匹配換頁符\ u000C。


我誤解了這個問題,在第一,但這裏是你會怎麼做它的Python:

import re 
HTML_CONTENT = """\ 
<img id="headingpic"/> abcdef 
qwerty..??,ksjhe173((:$ 
<div id="myContent"> 
""" 

print re.sub(">[^<]*<", "><", HTML_CONTENT) 

輸出:

<img id="headingpic"/><div id="myContent">   

或者,如果你只是想刪除空格和換行符:

import re 
HTML_CONTENT = """\ 
<img id="headingpic"/> 

<div id="myContent"> 
""" 

print re.sub(">[\s]*<", "><", HTML_CONTENT) 

輸出:

<img id="headingpic"/><div id="myContent"> 
+0

感謝:這並確定一個「>」字符,然後刪除空格和格式字符?還是隻是刪除所有格式字符,無論他們在哪裏? –

+0

已經更新的答案。我想我起初誤解了這個問題。你是不是在「><」之間不需要任何字符,或者只是在「><」之間刪除空格和換行符? – chown