找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 7241|回复: 5

[已解决] python re.findall()正则表达式报错

1

主题

2

帖子

2

积分

贫民

积分
2
purple11261126 发表于 2016-10-30 15:23:13 | 显示全部楼层 |阅读模式
麻烦大伙啦,用re.findall()时,正则表达式报语法错误,正则本身没有问题,在正则表达式软件中已经测试过了,可是python运行就就报语法错误,实在不知道是该怎么解决。
下面是那段代码:
f = re.findall('<dd class="col2-7 word">[\s]+<span><a href="/seo/words/(?<grp0>[^"]+)"[\S\s]+?查百度[\S\s]+?<dd class="col2-2 center">[^\d]+(?<grp1>[^\D]+)[\s]+</dd>\n<dd class="col2-2 center">' , html)

还有报错信息:
Traceback (most recent call last):
  File "E:\workspace_HBuilder\Python_Project\Python_Leaning\src\weixin_datadw\test.py", line 20, in <module>
    get_index_5118("seo")
  File "E:\workspace_HBuilder\Python_Project\Python_Leaning\src\weixin_datadw\test.py", line 14, in get_index_5118
    f = re.findall(str('<dd class="col2-7 word">[\s]+<span><a href="/seo/words/(?<grp0>[^"]+)"[\S\s]+?查百度[\S\s]+?<dd class="col2-2 center">[^\d]+(?<grp1>[^\D]+)[\s]+</dd>\n<dd class="col2-2 center">'), html)
  File "C:\Python27\lib\re.py", line 181, in findall
    return _compile(pattern, flags).findall(string)
  File "C:\Python27\lib\re.py", line 251, in _compile
    raise error, v # invalid expression
sre_constants.error: syntax error

回复

使用道具 举报

9

主题

39

帖子

39

积分

贫民

积分
39
午夜垃圾桶 发表于 2016-10-31 23:01:02 | 显示全部楼层
urlopen之后只是一个urllib.urlopen对象,所以要html.read()一下才是url代码
回复 支持 1 反对 0

使用道具 举报

1419

主题

1891

帖子

291

积分

侠客

积分
291

最佳新人热心会员默默耕耘

whydo1 发表于 2016-10-30 19:25:41 | 显示全部楼层
把你需要匹配的内容贴出来, 大家可以帮你写正则
python3.4.4, win10
回复 支持 反对

使用道具 举报

1

主题

2

帖子

2

积分

贫民

积分
2
purple11261126  楼主| 发表于 2016-10-31 09:50:47 | 显示全部楼层
whydo1 发表于 2016-10-30 19:25
把你需要匹配的内容贴出来, 大家可以帮你写正则

def get_index_5118(keyword):
    url_5118 = "http://www.5118.com/seo/words/" + keyword
    html = urllib.urlopen(url_5118)
    f = re.findall('<dd class="col2-7 word">[\s]+<span><a href="/seo/words/(?<grp0>[^"]+)"[\S\s]+?查百度[\S\s]+?<dd class="col2-2 center">[^\d]+(?<grp1>[^\D]+)[\s]+</dd>\n<dd class="col2-2 center">', html)
    #<dd class="col2-7 word">[\s]+<span><a href="/seo/words/(?<grp0>[^"]+)"[\S\s]+?查百度[\S\s]+?<dd class="col2-2 center">[^\d]+(?<grp1>[^\D]+)[\s]+</dd>\n<dd class="col2-2 center">
    for x in f:
        print x
麻烦,版主,整个代码都在上面,主要是想问问这个报错怎么解决,因为正则是用程序生成的,测试过没有问题可以匹配内容,只是放到findall里就显示语法错误,所以想知道为啥正则没有问题,可是findall却报语法错误,麻烦版主啦
回复 支持 反对

使用道具 举报

1

主题

3

帖子

3

积分

贫民

积分
3
zyhao 发表于 2016-11-1 04:56:25 | 显示全部楼层
我也觉得可能是楼上说的情况,楼主把整个代码贴出来啊~
回复 支持 反对

使用道具 举报

50

主题

1057

帖子

1108

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1108

活跃会员热心会员最佳导师默默耕耘突出贡献优秀版主荣誉管理论坛元老

blueelwang 发表于 2016-11-1 19:01:36 | 显示全部楼层
午夜垃圾桶 发表于 2016-10-31 23:01
urlopen之后只是一个urllib.urlopen对象,所以要html.read()一下才是url代码

非常赞同, urlopen之后是一个对象, 打印之后是这样的:
<addinfourl at 4429680368 whose fp = <socket._fileobject object at 0x107f00350>>
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表