我叫学得会 发表于 2021-12-19 11:48:45

关于正则匹配筛选出符合条件的URL问题

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

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


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

txt1内容为:
200   147KBhttp://192.168.1.12:80/;admin/;admin/admin-post.html
200   147KBhttp://192.168.1.12:80/;admin/;admin/admin-logout.html
200   147KBhttp://192.168.1.12:80/;admin/;admin/admin-login.html
400   173B   http://192.168.1.12:80/;admin/;admin/cgi-bin/test
200   147KBhttp://192.168.1.12:80/;admin/;admin/comment-admin.html
200   147KBhttp://192.168.1.12:80/;admin/;admin/list
200   736B   http://192.168.1.12:80/;admin/;admin/robots.txt
200    69B   http://192.168.1.12:80/;admin/;admin/swagger-resources
200   147KBhttp://192.168.1.12:80/;admin/;admin/swagger-ui.html
200   147KBhttp://192.168.1.12:80/;admin/;admin/thank-you.html
200   147KBhttp://192.168.1.12:80/;admin/;admin/tiki-admin.html
400   173B   http://192.168.1.12:80/;admin/;login/test
400   0B   http://192.168.1.12:80/;admin/;login/login.htm
400   0B   http://192.168.1.12:80/;admin/;login/a%5c.aspx
200   147KBhttp://192.168.1.12:80/;admin/;login/admin-header.html
200   147KBhttp://192.168.1.12:80/;admin/;login/admin-logout.html
200   147KBhttp://192.168.1.12:80/;admin/;login/admin-post.html
200   147KBhttp://192.168.1.12:80/;admin/;login/admin-footer.html
200   147KBhttp://192.168.1.12:80/;admin/;login/admin-login.html
200   147KBhttp://192.168.1.12:80/;admin/;login/admin-functions.html
200   147KBhttp://192.168.1.12:80/;admin/;login/admin-odkazy.html
400   173B   http://192.168.1.12:80/;admin/;login/cgi-bin/test
200   147KBhttp://192.168.1.12:80/;admin/;login/comment-admin.html
200   147KBhttp://192.168.1.12:80/;admin/;login/list
200   736B   http://192.168.1.12:80/;admin/;login/robots.txt
200    69B   http://192.168.1.12:80/;admin/;login/swagger-resources
200   147KBhttp://192.168.1.12:80/;admin/;login/swagger-ui.html
200   147KBhttp://192.168.1.12:80/;admin/;login/thank-you.html
200   147KBhttp://192.168.1.12:80/;admin/;login/tiki-admin.html



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

def Durl(rurl):
    findurl = re.compile(r"^200.*(?P<TEST>(+://[^\s]*))$",re.S)
    resulin = findurl.search(rurl)
    resulin2 = resulin.group("TEST")
    print(resulin2)
    #print(resulin)

# def Durl(rurl):
#   findurl = re.compile(r"^200(.*B)(?P<url>.*)$",re.S)
#   resulin = findurl.match(rurl)
#   FPurl   = resulin.group("url")
#   print(FPurl)

suchocolate 发表于 2021-12-19 14:25:52

本帖最后由 suchocolate 于 2021-12-19 14:30 编辑

import re

with open('txt1.txt') as f:
    txt = f.read()
result = re.findall(r'^200.*', txt, re.M)#从你的语法里看,url并没有特殊的存在,所以可以不用管。当然如果你有更多案例,请把url贴全。
print(result)

bloodbat007 发表于 2021-12-19 14:54:00

re.findall(r"(200.*)",text)

我叫学得会 发表于 2021-12-19 18:47:06

suchocolate 发表于 2021-12-19 14:25


师傅啊,这个问题卡我报错是因为我需要把输出到的结果,是打印纯 url,不要200XXXKB 这两组,就是在200 里筛选出 url,只打印url地址,只取200 后 的 URL 打印出来。。。所以求最优解{:10_334:}

WaitOtherCutely 发表于 2021-12-19 19:59:06

本帖最后由 WaitOtherCutely 于 2021-12-19 20:03 编辑

import re


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

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


如果此回答解决了您的疑问 别忘了设至最佳答案或已采纳呀~

我叫学得会 发表于 2021-12-19 20:23:04

WaitOtherCutely 发表于 2021-12-19 19:59
如果此回答解决了您的疑问 别忘了设至最佳答案或已采纳呀~

是这样子的,简洁有效,谢谢师傅{:10_288:}
页: [1]
查看完整版本: 关于正则匹配筛选出符合条件的URL问题