python正则匹配不了

JPF1024 2014-08-21 11:13:33
要匹配


<body>
<div class="nav">fdsafkdsajkfdslajkfldsajfklsdajlfdslafjdsalfjdskalfkdsajlkfds</div>
<div class="content">
<p>fdaskfdska</p>
<p>fdaskfdska</p>
<p>fdaskfdska</p>
<p>fdaskfdska</p>
<p>fdaskfdska</p>
<!--匹配class 为content里面的所有内容[包括标签]-->
</div>
<div class="bottom">fdsafkdsajkfdslajkfldsajfklsdajlfdslafjdsalfjdskalfkdsajlkfds</div>
</body>


匹配class 为content里面的所有内容[包括标签]

python代码如下:


'''
从本地html中筛选出内容部分

@path 文件路径
'''
def get_qsykcontent(path):
with open(path,"rb") as rsread:
kisa=rsread.read().decode('utf8')

pasn=re.compile('(?<=class="content").*')#这一句报错
result=pasn.findall(kisa)
print result


等大神解决,谢谢了
...全文
132 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
The_Third_Wave 2014-08-22
  • 打赏
  • 举报
回复
脑子抽了,你这个是文件,里面有换行符,所以'(?<=class="content")[\s\S]*'才是对的,至于要不要调整缩进,你是打开文件,so,不用缩进到一起。。。
JPF1024 2014-08-22
  • 打赏
  • 举报
回复
引用 6 楼 u013171165 的回复:
'(?<=class="content")[\s\S]*?(?=/div)'
谢谢,这个可以用,非常感谢
JPF1024 2014-08-22
  • 打赏
  • 举报
回复
引用 4 楼 xmnathan 的回复:
为什么非要用正则呢

Str = '''
<body>
<div class="nav">fdsafkdsajkfdslajkfldsajfklsdajlfdslafjdsalfjdskalfkdsajlkfds</div>
<div class="content">
<p>fdaskfdska</p>
<p>fdaskfdska</p>
<p>fdaskfdska</p>
<p>fdaskfdska</p>
<p>fdaskfdska</p>
</div>
<div class="bottom">fdsafkdsajkfdslajkfldsajfklsdajlfdslafjdsalfjdskalfkdsajlkfds</div>
</body>
'''


for one in Str.split("</div>"):
	index = one.find('''<div class="content">''')
	if index >= 0:
		print one

>>> <div class="content"> <p>fdaskfdska</p> <p>fdaskfdska</p> <p>fdaskfdska</p> <p>fdaskfdska</p> <p>fdaskfdska</p>
内容太多了,正则可能好一点
The_Third_Wave 2014-08-22
  • 打赏
  • 举报
回复
'(?<=class="content")[\s\S]*?(?=/div)'
JPF1024 2014-08-22
  • 打赏
  • 举报
回复
引用 3 楼 u013171165 的回复:
脑子抽了,你这个是文件,里面有换行符,所以'(?<=class="content")[\s\S]*'才是对的,至于要不要调整缩进,你是打开文件,so,不用缩进到一起。。。
这个可以用,但是我要怎么匹配第一个结束的div呢?


<body>
<div class="nav">fdsafkdsajkfdslajkfldsajfklsdajlfdslafjdsalfjdskalfkdsajlkfds</div>
<div class="content">
<p>fdaskfdska</p>
<p>fdaskfdska</p>
<p>fdaskfdska</p>
<p>fdaskfdska</p>
<p>fdaskfdska</p>
<!--匹配class 为content里面的所有内容[包括标签]-->
</div><!--只匹配到这个地方-->
<div class="bottom">fdsafkdsajkfdslajkfldsajfklsdajlfdslafjdsalfjdskalfkdsajlkfds</div>
</body>
谢谢
  • 打赏
  • 举报
回复
为什么非要用正则呢

Str = '''
<body>
<div class="nav">fdsafkdsajkfdslajkfldsajfklsdajlfdslafjdsalfjdskalfkdsajlkfds</div>
<div class="content">
<p>fdaskfdska</p>
<p>fdaskfdska</p>
<p>fdaskfdska</p>
<p>fdaskfdska</p>
<p>fdaskfdska</p>
</div>
<div class="bottom">fdsafkdsajkfdslajkfldsajfklsdajlfdslafjdsalfjdskalfkdsajlkfds</div>
</body>
'''


for one in Str.split("</div>"):
	index = one.find('''<div class="content">''')
	if index >= 0:
		print one

>>> <div class="content"> <p>fdaskfdska</p> <p>fdaskfdska</p> <p>fdaskfdska</p> <p>fdaskfdska</p> <p>fdaskfdska</p>
The_Third_Wave 2014-08-21
  • 打赏
  • 举报
回复
引用 1 楼 u013171165 的回复:
引用
with open(path,"rb") as rsread: kisa=rsread.read().decode('utf8') pasn=re.compile('(?<=class="content").*')#这一句报错 result=pasn.findall(kisa)
kisa是一个局部变量,正则没错
你缩进调整下就对了
The_Third_Wave 2014-08-21
  • 打赏
  • 举报
回复
引用
with open(path,"rb") as rsread: kisa=rsread.read().decode('utf8') pasn=re.compile('(?<=class="content").*')#这一句报错 result=pasn.findall(kisa)
kisa是一个局部变量,正则没错

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧