2011-12-20 48 views
2

我需要在Python中使用正则表达式的帮助。使用REGEX提取模式之间的文本

我有一个大的HTML文件[大约400线]具有下列模式

text here(div,span,img tags) 

<!-- 3GP||Link|| --> 

text here(div,span,img tags) 

所以,现在我正在寻找一个正则表达式,可以提取我这个 - :

Link 

给定的模式在html文件中是唯一的。

回答

4
>>> d = """ 
... Some text here(div,span,img tags) 
... 
... <!-- 3GP||**Some link**|| --> 
... 
... Some text here(div,span,img tags) 
... """ 
>>> import re 
>>> re.findall(r'\<!-- 3GP\|\|([^|]+)\|\| --\>',d) 
['**Some link**'] 
  • r''是原始文字,它停止标准的字符串的解释逃脱
  • \<!-- 3GP\|\|是一个正则表达式逃脱匹配<!-- 3GP||
  • ([^|]+)将匹配所有字符都一个|和团体也为了方便
  • \|\| --\>|| -->
  • 一个正则表达式匹配逃脱re.findall返回字符串中重新组织模式的所有非重叠匹配,如果在重新组合模式中存在组表达式,则返回该匹配。
+0

Thanks.It工作。如果你不介意,你可以向我解释你在那里做了什么。 – RanRag 2011-12-20 12:03:29

+0

我觉得严格说来了''<' and '>这里不需要逃跑,但它不会做任何伤害,他们是在其它模式实现的元字符。 – MattH 2011-12-20 12:22:41

+0

谢谢。一个非常好的解释。可以给我建议学习正则表达式的好教程。问题是有太多的教程可用。 – RanRag 2011-12-20 12:59:32

0
import re 
re.match(r"<!-- 3GP\|\|(.+?)\|\| -->", "<!-- 3GP||Link|| -->").group(1) 

产生"Link"

0

如果您需要解析别的东西,你也可以用BeautifulSoup结合正则表达式:

import re 
from BeautifulSoup import BeautifulSoup, Comment 

soup = BeautifulSoup(<your html here>) 
link_regex = re.compile('\s+3GP\|\|(.*)\|\|\s+') 
comment = soup.find(text=lambda text: isinstance(text, Comment) 
        and link_regex.match(text)) 
link = link_regex.match(comment).group(1) 
print link 

注意,在这种情况下,正规表示法只需要因为BeautifulSoup已经细心地匹配发言内容从评论中提取文本。

+0

我的HTML过于畸形的,这就是为什么我不使用美丽的汤。 – RanRag 2011-12-20 12:52:33

+0

我明白了,那么我同意,最好的选择是[净化你的数据(http://www.crummy.com/software/BeautifulSoup/documentation.html#Sanitizing%20Bad%20Data%20with%使用正则表达式20Regexps)。 – jcollado 2011-12-20 12:56:17

+0

是的,那会怎么做 – RanRag 2011-12-20 13:01:26

相关问题