python正则表达式多行匹配

隔壁的流氓王欧巴 发布于 2016/01/22 21:45
阅读 2K+
收藏 0
要被匹配的文字是这样的
<em style="width:100px;text-align:left;padding-left:5px;">馨竹香米</em>
                <em style="width:80px;">2.90</em>
                <em style="width:80px;">2.93</em>
                <em style="width:80px;">2.95</em>
                <em style="width:80px;">普通</em>
                <em style="width:80px;">斤</em>
                <em style="width:106px;">2016-01-01</em>
                <em style="width:60px;">&nbsp;</em>
我想用类似这样的匹配规则写出来:
<em style="width:100px;text-align:left;padding-left:5px;">(.*?)</em>
                <em style="width:80px;">(.*?)</em>
                <em style="width:80px;">(.*?)</em>
                <em style="width:80px;">(.*?)</em>
                <em style="width:80px;">(.*?)</em>
                <em style="width:80px;">(.*?)</em>
                <em style="width:106px;">(.*?)</em>
                <em style="width:60px;">&nbsp;</em>

只匹配一行的话是可以的,比如说匹配规则这么写
<em style="width:100px;text-align:left;padding-left:5px;">(.*?)</em>
但是照我想要的那个写法的时候就显示匹配不到了。


不要告诉我匹配这样写>(.*?)<
因为我是在一个网页上照的,我要的格式就是上面说的,总不能把他网页里的参数什么的也抓下来。。。求解
加载中
1
北京老爷们儿
北京老爷们儿
import re
ss = """字符串"""
res = re.compile("<em style=.*?;\">(.*?)</em>")
print res.findall(ss)
1
Feng_Yu
Feng_Yu
python re模块有个flag就是开启多行匹配。自行google解决
0
半桶水2007

同上面的解答差不多。

#-*-coding:gbk-*-
import re
str1=r'''
<em style="width:100px;text-align:left;padding-left:5px;">馨竹香米3</em>
                <em style="width:80px;">3.90</em>
                <em style="width:80px;">3.93</em>
                <em style="width:80px;">3.95</em>
                <em style="width:80px;">普通</em>
                <em style="width:80px;">斤</em>
                <em style="width:106px;">2016-01-01</em>
                <em style="width:60px;">&nbsp;</em>


<em style="width:100px;text-align:left;padding-left:5px;">馨竹香米2</em>
                <em style="width:80px;">2.90</em>
                <em style="width:80px;">2.93</em>
                <em style="width:80px;">2.95</em>
                <em style="width:80px;">普通</em>
                <em style="width:80px;">斤</em>
                <em style="width:106px;">2016-01-01</em>
                <em style="width:60px;">&nbsp;</em>


<em style="width:100px;text-align:left;padding-left:5px;">馨竹香米1</em>
                <em style="width:80px;">1.90</em>
                <em style="width:80px;">1.93</em>
                <em style="width:80px;">1.95</em>
                <em style="width:80px;">普通</em>
                <em style="width:80px;">斤</em>
                <em style="width:106px;">2016-01-01</em>
                <em style="width:60px;">&nbsp;</em>
'''#源字符串



restr=r'''<em style="width:100px;text-align:left;padding-left:5px;">(.*?)</em>
                <em style="width:80px;">(.*?)</em>
                <em style="width:80px;">(.*?)</em>
                <em style="width:80px;">(.*?)</em>
                <em style="width:80px;">(.*?)</em>
                <em style="width:80px;">(.*?)</em>
                <em style="width:106px;">(.*?)</em>
                <em style="width:60px;">&nbsp;</em>'''#规则


restr=re.compile(restr)
str_result=re.findall(restr,str1) 
print str_result 


#---得到的结果是1个大列表如下:

[(u'\u99a8\u7af9\u9999\u7c733', u'3.90', u'3.93', u'3.95', u'\u666e\u901a', u'\u65a4', u'2016-01-01'), (u'\u99a8\u7af9\u9999\u7c732', u'2.90', u'2.93', u'2.95', u'\u666e\u901a', u'\u65a4', u'2016-01-01'), (u'\u99a8\u7af9\u9999\u7c731', u'1.90', u'1.93', u'1.95', u'\u666e\u901a', u'\u65a4', u'2016-01-01')]

#如果需要结果列表的具体值,可以定位到具体列表的元组,print出来:

print str_result[0][0] #馨竹香米3





返回顶部
顶部