【发布时间】:2020-01-11 09:01:58
【问题描述】:
我正在使用请求来下拉一个硬币矿工域列表,以便我可以将它们添加到防火墙阻止列表中:
'https://gitlab.com/ZeroDot1/CoinBlockerLists/blob/master/list_browser.txt?format=json&viewer=simple'
我想使用正则表达式来解析数据并仅提取域
正则表达式模式:
match = re.compile(r'(\"\\\\u003e)(.*?)(\\\\u003c\/)')
样本数据: """
lang=\"plaintext\"\u003echws.browsermine.com\u003c/span\u003e\n\u003cspan id=\"LC322\" class=\"line\" lang=\"plaintext\"\u003ecieh. mx\u003c/span\u003e\n\u003cspan id=\"LC323\" class=\"line\" lang=\"plaintext\"\u003eclgserv.pro\u003c/span\u003e\n\u003cspan id=\" LC324\" class=\"line\" lang=\"plaintext\"\u003eclickandbuy.review\u003c/span\u003e\n\u003cspan id=\"LC325\" class=\"line\" lang=\"plaintext \"\u003eclickandbuy.win\u003c/span\u003e\n\u003cspan id=\"LC326\" class=\"line\" lang=\"plaintext\"\u003eclickwith.bi\u003c/span\u003e\n\ u003cspan id=\"LC327\" class=\"line\" lang=\"plaintext\"\u003eclickwith.bid\u003c/span\u003e\n\u003cspan id=\"LC328\" class=\"line\" lang=\"plaintext\"\u003eclickwith.date\u003c/span\u003e\n\u003cspan id=\"LC329\" class=\"line\" lang=\"plaintext\"\u003ecliggi.download\u003c/span \u003e\n\u003cspan id=\"LC330\" class=\"line\" lang=\"plaintext\"\u003eclod.pw\u003c/span\u003e\n\u003cspan id=\"LC331\" class= \"line\" lang=\"明文\"\u003ec Loudcdn.gd\u003c/span\u003e\n\u003cspan id=\"LC332\" class=\"line\" lang=\"plaintext\"\u003ecloudcdn.gdn\u003c/span\u003e\n\u003cspan id= \"LC333\" class=\"line\" lang=\"plaintext\"\u003ecloudcoins.co\u003c/span\u003e\n\u003cspan id=\"LC334\" class=\"line\" lang=\ "plaintext\"\u003ecloudflane.com\u003c/span\u003e\n\u003cspan id=\"LC335\" class=\"line\"
"""
我开始尝试使用将请求输出匹配为字符串
re.match(pattern, string)
re.search(pattern, string)
re.findall(pattern, string)
所有这些都返回 None 或空列表
这让我觉得这是我的正则表达式,但是当我使用 www.regex101.com 时,它匹配正确。我最初有 p = re.compile(r'(\"\\u003e)(.*?)(\\u003c/)'),最后没有转义的“/”。我添加了“/”所以它会匹配所有类型的正则表达式,而不仅仅是 python 正则表达式。
我尝试使用 response.content 并将正则表达式模式匹配更改为字节,但它也返回 None 或字节字符串的空列表。
我还尝试将请求响应写入文件,然后使用我的正则表达式模式解析文件,但这也返回 None。
这是我试过的代码:
import requests
import pprint
import re
requests.packages.urllib3.disable_warnings()
url = 'https://gitlab.com/ZeroDot1/CoinBlockerLists/blob/master/list_browser.txt?format=json&viewer=simple'
#regex_pattern = re.compile(r'\\u003e(.*?)\\\\u003c/')
p = re.compile(r'(\"\\\\u003e)(.*?)(\\\\u003c\/)')
r = requests.get(url, verify=False)
data = r.text
pprint.pprint(data)
match = re.findall(p, data)
print(match)
当我尝试将其粘贴到“显示一些代码”字段时,我的代码格式看起来很奇怪。希望这是有道理的
我的最终目标是通过匹配我的正则表达式的第 2 组来解析域。
任何帮助将不胜感激!
【问题讨论】:
-
尝试删除不必要的分组和反斜杠:
p = re.compile(r'\u003e(.*?)\u003c')或p = re.compile(r'\\u003e(.*?)\\u003c')
标签: regex python-3.x python-requests