鱼C论坛

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

[已解决]关于正则匹配筛选出符合条件的URL问题

[复制链接]
发表于 2021-12-19 11:48:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 我叫学得会 于 2021-12-19 11:50 编辑

各位师傅们好,小弟最近在自学的途中尝试编写Python小工具,遇到问题,还请各位师傅指点迷津,拜谢


需求是:从 txt1 内容中筛选出状态码为200开头的网址,并且只将符合条件的URL地址写入新文件 txt2

txt1内容为:
  1. 200   147KB  http://192.168.1.12:80/;admin/;admin/admin-post.html
  2. 200   147KB  http://192.168.1.12:80/;admin/;admin/admin-logout.html
  3. 200   147KB  http://192.168.1.12:80/;admin/;admin/admin-login.html
  4. 400   173B   http://192.168.1.12:80/;admin/;admin/cgi-bin/test
  5. 200   147KB  http://192.168.1.12:80/;admin/;admin/comment-admin.html
  6. 200   147KB  http://192.168.1.12:80/;admin/;admin/list
  7. 200   736B   http://192.168.1.12:80/;admin/;admin/robots.txt
  8. 200    69B   http://192.168.1.12:80/;admin/;admin/swagger-resources
  9. 200   147KB  http://192.168.1.12:80/;admin/;admin/swagger-ui.html
  10. 200   147KB  http://192.168.1.12:80/;admin/;admin/thank-you.html
  11. 200   147KB  http://192.168.1.12:80/;admin/;admin/tiki-admin.html
  12. 400   173B   http://192.168.1.12:80/;admin/;login/test
  13. 400     0B   http://192.168.1.12:80/;admin/;login/login.htm
  14. 400     0B   http://192.168.1.12:80/;admin/;login/a%5c.aspx
  15. 200   147KB  http://192.168.1.12:80/;admin/;login/admin-header.html
  16. 200   147KB  http://192.168.1.12:80/;admin/;login/admin-logout.html
  17. 200   147KB  http://192.168.1.12:80/;admin/;login/admin-post.html
  18. 200   147KB  http://192.168.1.12:80/;admin/;login/admin-footer.html
  19. 200   147KB  http://192.168.1.12:80/;admin/;login/admin-login.html
  20. 200   147KB  http://192.168.1.12:80/;admin/;login/admin-functions.html
  21. 200   147KB  http://192.168.1.12:80/;admin/;login/admin-odkazy.html
  22. 400   173B   http://192.168.1.12:80/;admin/;login/cgi-bin/test
  23. 200   147KB  http://192.168.1.12:80/;admin/;login/comment-admin.html
  24. 200   147KB  http://192.168.1.12:80/;admin/;login/list
  25. 200   736B   http://192.168.1.12:80/;admin/;login/robots.txt
  26. 200    69B   http://192.168.1.12:80/;admin/;login/swagger-resources
  27. 200   147KB  http://192.168.1.12:80/;admin/;login/swagger-ui.html
  28. 200   147KB  http://192.168.1.12:80/;admin/;login/thank-you.html
  29. 200   147KB  http://192.168.1.12:80/;admin/;login/tiki-admin.html
复制代码



我尝试的 search()方法和match()方法总是报错,求最优解!

  1. def Durl(rurl):
  2.     findurl = re.compile(r"^200.*(?P<TEST>([a-zA-z]+://[^\s]*))$",re.S)
  3.     resulin = findurl.search(rurl)
  4.     resulin2 = resulin.group("TEST")
  5.     print(resulin2)
  6.     #print(resulin)

  7. # def Durl(rurl):
  8. #     findurl = re.compile(r"^200(.*B)(?P<url>.*)$",re.S)
  9. #     resulin = findurl.match(rurl)
  10. #     FPurl   = resulin.group("url")
  11. #     print(FPurl)
复制代码
最佳答案
2021-12-19 19:59:06
本帖最后由 WaitOtherCutely 于 2021-12-19 20:03 编辑
  1. import re


  2. # open("需读取的文件path") 例如 "D:\\a.txt"
  3. readed_f = open("D:\\a.txt")
  4. text = readed_f.read()
  5. readed_f.close()

  6. # open("存储至哪个文件path") 例如 "D:\\b.txt"
  7. with open("D:\\b.txt", 'w') as writed_f:
  8.     writed_f.write("\n".join(re.findall(r"200.*\s(\S*://.*)", text)))
复制代码


如果此回答解决了您的疑问 别忘了设至最佳答案或已采纳呀~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-12-19 14:25:52 | 显示全部楼层
本帖最后由 suchocolate 于 2021-12-19 14:30 编辑
  1. import re

  2. with open('txt1.txt') as f:
  3.     txt = f.read()
  4. result = re.findall(r'^200.*', txt, re.M)  #  从你的语法里看,url并没有特殊的存在,所以可以不用管。当然如果你有更多案例,请把url贴全。
  5. print(result)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-19 14:54:00 | 显示全部楼层
re.findall(r"(200.*)",text)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-19 18:47:06 | 显示全部楼层


师傅啊,这个问题卡我报错是因为我需要把输出到的结果,是打印纯 url,不要  200  XXXKB 这两组,就是在200 里筛选出 url,只打印url地址,只取200 后 的 URL 打印出来。。。所以求最优解
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-19 19:59:06 | 显示全部楼层    本楼为最佳答案   
本帖最后由 WaitOtherCutely 于 2021-12-19 20:03 编辑
  1. import re


  2. # open("需读取的文件path") 例如 "D:\\a.txt"
  3. readed_f = open("D:\\a.txt")
  4. text = readed_f.read()
  5. readed_f.close()

  6. # open("存储至哪个文件path") 例如 "D:\\b.txt"
  7. with open("D:\\b.txt", 'w') as writed_f:
  8.     writed_f.write("\n".join(re.findall(r"200.*\s(\S*://.*)", text)))
复制代码


如果此回答解决了您的疑问 别忘了设至最佳答案或已采纳呀~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-12-19 20:23:04 | 显示全部楼层
WaitOtherCutely 发表于 2021-12-19 19:59
如果此回答解决了您的疑问 别忘了设至最佳答案或已采纳呀~

是这样子的,简洁有效,谢谢师傅
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 19:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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