2016-06-21 32 views
0

使用正則表達式的文字刪除CSS我有一個字符串,如:從在Python 3

"<p> 
<style type=""text/css""> 
P { margin-bottom: 0.08in; direction: ltr; widows: 2; orphans: 2; }A:link { color: rgb(0, 0, 255); } </style> 
</p> 
<p style=""font-variant: normal; font-style: normal; font-weight: normal""> 
    <font face=""Trebuchet MS, Arial, Verdana, sans-serif""><span style=""font-size: 12px; background-color: rgb(238, 238, 238);"">blablabla. </span></font></p> 
<p style=""font-variant: normal; font-style: normal; font-weight: normal""> 
<font face=""Trebuchet MS, Arial, Verdana, sans-serif""><span style=""font-size: 12px; background-color: rgb(238, 238, 238);"">tjatjatja</span></font><span style=""font-family: 'Trebuchet MS', Arial, Verdana, sans-serif; font-size: 12px; background-color: rgb(238, 238, 238);"">tjetjetje</span><span style=""font-size: 12px; font-family: 'Trebuchet MS', Arial, Verdana, sans-serif; background-color: rgb(238, 238, 238);"">.</span></p> 
<p style=""font-variant: normal; font-style: normal; font-weight: normal""> 
<span style=""font-family: 'Trebuchet MS', Arial, Verdana, sans-serif; font-size: 12px; background-color: rgb(238, 238, 238);"">huehuehue</span></p> 
" 

我想刪除第一個樣式標籤和它的內容。我有這樣一個正則表達式:

([\s\S]*)<style type=""text\/css"">[\s\S]+<\/style>([\s\S]*) 

剛剛的第一個樣式標籤匹配,但是當我嘗試與刪除它在python:

re.sub(r'([\s\S]*)<style type=""text/css"">[\s\S]*</style>([\s\S]*)', r'\1\2', cell_text, flags=re.M) 

這是行不通的。我認爲這要麼是與團體打交道,要麼是以多線的形式進行。有任何想法嗎?

+0

如果可以使用更多'style'標籤,至少必須使''\ s \ S] *'非貪婪('[\ s \ S] *?')。 – ClasG

+0

And ...我不是Python專家,但你的正則表達式有單引號 - 爲什麼2'「'在裏面?我猜字符串有2,因爲這是你如何在Python中轉義引號,但不應該是必須在一個單引號字符串中,或​​者...? – ClasG

+0

不知道爲什麼示例數據包含引號。爲了對抗它,我使用了包含正則表達式的原始字符串的單引號 – tjarles

回答

1

使用,而不是一個分析器:

from bs4 import BeautifulSoup 

string = """ 
<p> 
<style type=""text/css""> 
P { margin-bottom: 0.08in; direction: ltr; widows: 2; orphans: 2; }A:link { color: rgb(0, 0, 255); } </style> 
</p> 
<p style=""font-variant: normal; font-style: normal; font-weight: normal""> 
    <font face=""Trebuchet MS, Arial, Verdana, sans-serif""><span style=""font-size: 12px; background-color: rgb(238, 238, 238);"">blablabla. </span></font></p> 
<p style=""font-variant: normal; font-style: normal; font-weight: normal""> 
<font face=""Trebuchet MS, Arial, Verdana, sans-serif""><span style=""font-size: 12px; background-color: rgb(238, 238, 238);"">tjatjatja</span></font><span style=""font-family: 'Trebuchet MS', Arial, Verdana, sans-serif; font-size: 12px; background-color: rgb(238, 238, 238);"">tjetjetje</span><span style=""font-size: 12px; font-family: 'Trebuchet MS', Arial, Verdana, sans-serif; background-color: rgb(238, 238, 238);"">.</span></p> 
<p style=""font-variant: normal; font-style: normal; font-weight: normal""> 
<span style=""font-family: 'Trebuchet MS', Arial, Verdana, sans-serif; font-size: 12px; background-color: rgb(238, 238, 238);"">huehuehue</span></p> 
""" 

soup = BeautifulSoup(string) 
[s.extract() for s in soup('style')] 
print soup 
+0

由於Beautifulsoup已經被導入,我正在考慮這樣做。你的解決方案非常有效!謝謝! – tjarles

+0

@tjarles:很高興幫助:) – Jan

+1

爲什麼downvote? – Jan

0

要使用正則表達式使用刪除CSS這個正則表達式代碼:

(?s)<style>(.*?)<\/style> 

要做到在Python中替換爲「重」庫做這樣的事情這樣的:

regex = '(?s)<style>(.*?)<\/style>' 
pattern = re.compile(regex) 
re.sub(pattern, whatYouWantToReplaceItWith, stringToReplace) 

下面是使用Python中的「重」庫教程: http://www.tutorialspoint.com/python/python_reg_expressions.htm

+0

該鏈接不使用我的示例中的字符串。 g和正則表達式的例子,並輸入它匹配的第一個標籤。這是我不確定的替代部分。 – tjarles

0
 import re 
     text = "<p><style type=""text/css""> P { margin-bottom: 0.08in; direction: ltr; widows: 2; orphans: 2; }A:link { color: rgb(0, 0, 255); } </style></p> 
       <p style=""font-variant: normal; font-style: normal; font-weight: normal""><font face=""Trebuchet MS, Arial, Verdana, sans-serif""><span style=""font-size: 12px; background-color: rgb(238, 238, 238);"">blablabla. </span></font></p> 
       <p style=""font-variant: normal; font-style: normal; font-weight: normal""><font face=""Trebuchet MS, Arial, Verdana, sans-serif""><span style=""font-size: 12px; background-color: rgb(238, 238, 238);"">tjatjatja</span></font><span style=""font-family: 'Trebuchet MS', Arial, Verdana, sans-serif; font-size: 12px; background-color: rgb(238, 238, 238);"">tjetjetje</span><span style=""font-size: 12px; font-family: 'Trebuchet MS', Arial, Verdana, sans-serif; background-color: rgb(238, 238, 238);"">.</span></p> 
       <p style=""font-variant: normal; font-style: normal; font-weight: normal""><span style=""font-family: 'Trebuchet MS', Arial, Verdana, sans-serif; font-size: 12px; background-color: rgb(238, 238, 238);"">huehuehue</span></p>" 
     pattern = '[\s\S]*(<style type=""text\/css"">[\s\S]+<\/style>)[\s\S]*' 
     text = re.sub(pattern , '', text) 

現在的子方法將一個空字符串替換匹配的字符串,問題是你必須要根據你想從字符串中刪除哪個組而不是角落找尋其他方式分組。