我需要在Python中使用正则表达式的帮助。使用REGEX提取模式之间的文本
我有一个大的HTML文件[大约400线]具有下列模式
text here(div,span,img tags)
<!-- 3GP||Link|| -->
text here(div,span,img tags)
所以,现在我正在寻找一个正则表达式,可以提取我这个 - :
Link
给定的模式在html文件中是唯一的。
我需要在Python中使用正则表达式的帮助。使用REGEX提取模式之间的文本
我有一个大的HTML文件[大约400线]具有下列模式
text here(div,span,img tags)
<!-- 3GP||Link|| -->
text here(div,span,img tags)
所以,现在我正在寻找一个正则表达式,可以提取我这个 - :
Link
给定的模式在html文件中是唯一的。
>>> 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
返回字符串中重新组织模式的所有非重叠匹配,如果在重新组合模式中存在组表达式,则返回该匹配。import re
re.match(r"<!-- 3GP\|\|(.+?)\|\| -->", "<!-- 3GP||Link|| -->").group(1)
产生"Link"
。
如果您需要解析别的东西,你也可以用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已经细心地匹配发言内容从评论中提取文本。
Thanks.It工作。如果你不介意,你可以向我解释你在那里做了什么。 – RanRag 2011-12-20 12:03:29
我觉得严格说来了''<' and '>这里不需要逃跑,但它不会做任何伤害,他们是在其它模式实现的元字符。 – MattH 2011-12-20 12:22:41
谢谢。一个非常好的解释。可以给我建议学习正则表达式的好教程。问题是有太多的教程可用。 – RanRag 2011-12-20 12:59:32