鱼C论坛

 找回密码
 立即注册
查看: 1446|回复: 5

[已解决]关于正则表达式的

[复制链接]
发表于 2019-7-23 22:59:08 | 显示全部楼层 |阅读模式
20鱼币
捕获.PNG
import urllib.request
import re
def get_url(url):
req = urllib.request.Request(url)
req.add_header("User-Agent","""Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763)"""
)
page = urllib.request.urlopen(req)
html = page.read().decode("utf-8")

return html
def get_id(html):
id_360 = r'((\d|[a-z]){32})'
id_list = re.findall(id_360,html)
print(id_list)
if __name__ == '__main__':
url = "http://image.so.com/i?q=%E5%8A%A8%E6%BC%AB%E5%A3%81%E7%BA%B8&src=srp&bz_parent=45&bz_child=67&bz_color=&bz_width=1536&bz_height=864&box=box_bz&bz_type=pc#/"
get_id(get_url(url))



我只想要前面那一串东西,怎么搞,为什么会出现后面那单独的一个。
求个答案
???????????????????????????????????
最佳答案
2019-7-23 22:59:09
id_360 = r'((\d|[a-z]){32})'  这一句应该改成:id_360 = r'[\da-z]{32}'  

小括号() 是为了提取匹配的字符串。表达式中有几个()就有几个相应的匹配字符串。
比如:re.findall(r'(\d)(\d)',"93ed56ae") ,结果:[('9', '3'), ('5', '6')]

中括号[] 是定义匹配的字符范围。所以这里应该用中括号:[\da-z]

最佳答案

查看完整内容

id_360 = r'((\d|[a-z]){32})' 这一句应该改成:id_360 = r'[\da-z]{32}' 小括号() 是为了提取匹配的字符串。表达式中有几个()就有几个相应的匹配字符串。 比如:re.findall(r'(\d)(\d)',"93ed56ae") ,结果:[('9', '3'), ('5', '6')] 中括号[] 是定义匹配的字符范围。所以这里应该用中括号:[\da-z]
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-7-23 22:59:09 | 显示全部楼层    本楼为最佳答案   
id_360 = r'((\d|[a-z]){32})'  这一句应该改成:id_360 = r'[\da-z]{32}'  

小括号() 是为了提取匹配的字符串。表达式中有几个()就有几个相应的匹配字符串。
比如:re.findall(r'(\d)(\d)',"93ed56ae") ,结果:[('9', '3'), ('5', '6')]

中括号[] 是定义匹配的字符范围。所以这里应该用中括号:[\da-z]
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-7-24 08:51:45 | 显示全部楼层
挺奇怪的   那一串串字符 都再哪里放着呢    我查看源码 里面也没有啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-7-24 09:50:30 | 显示全部楼层
本帖最后由 ietar 于 2019-7-24 10:03 编辑

排版好乱 建议用'[code]' 把代码封装起来

匹配模式的问题
id_360 = r'[\da-z]{32}'
就行了
原因不太清楚=。=

原因大概查了下 按照楼主的模式写法 是2个匹配组 匹配组1是那个长度32的 匹配组2是那个小写字母或数字
于是返回的列表每个元素都是元组 分别对应匹配组1和匹配组2
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-7-24 15:02:34 | 显示全部楼层
。。。萌新表示听不懂
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-7-24 15:48:11 | 显示全部楼层
re.findall()会把你写的所有分组都以元组的形式显示出来
如果不想要,就用
  1. for a, b in id_list:
  2.     print(a)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-28 22:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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