Python中与PHP的preg_match函数对应的是什么?

16
我计划将我的一个网页爬虫转移到Python。在PHP中,我喜欢使用 preg_matchpreg_match_all 函数。然而在Python中并没有像 preg_match 这样的适用函数。请问有谁能帮我吗?
例如,如果我想要获取 <a class="title"</a> 之间的内容,在PHP中我会使用以下函数:
preg_match_all('/a class="title"(.*?)<\/a>/si',$input,$output);

然而在Python中我无法找到类似的函数。


1
这是Python正则表达式文档:http://docs.python.org/howto/regex.html - Ben Lee
2
在Python中,我们不使用正则表达式来解析HTML,我们使用BeautifulSoup。请参见https://dev59.com/X3I-5IYBdhLWcg3wq6do#1732454。 - johnsyweb
3个回答

14

感谢诸位的回复。我已经开始使用Beautifulsoup,但我在使用时遇到了一些问题。 我将html数据传递给了Beatifulsopu,但是我遇到了这个错误。 soup = BeautifulSoup(data) print soup.prettify() line 52, in <module> soup = BeautifulSoup(data) File "/home/infoken-user/Desktop/lin/BeautifulSoup.py", line 1519, in init BeautifulStoneSoup.init(self, *args, **kwargs) File "/home/infoken-user/Desktop/lin/BeautifulSoup.py", line 1144, .. '^<?.*encoding='"['"].*?>').match(xml_data) TypeError: expected string or buffer - funnyguy

5
我认为你需要类似这样的东西:
output = re.search('a class="title"(.*?)<\/a>', input, flags=re.IGNORECASE)
    if output is not None:
        output = output.group(0)
        print(output)

您可以在正则表达式开头添加(?s)以启用多行模式:
output = re.search('(?s)a class="title"(.*?)<\/a>', input, flags=re.IGNORECASE)
    if output is not None:
        output = output.group(0)
        print(output)

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接