import re
def tst():
text = '''
<script>
'''
if proxi := re.findall(r"(?:<td\s[^>]*?><font\sclass\=spy14>(.*?)<script.*?\"\+(.*?)\)<\/script)", text):
for proxy, port in proxi:
yield f"{proxy}:{''.join(port)}"
if dtt := re.findall(r"<td colspan=1><font class\=spy1><font class\=spy14>(.*?)</font> (\d+[:]\d+) <font class\=spy5>([(]\d+ \w+ \w+[)])", text):
for date, time, taken in dtt:
yield f"{date} {' '.join([time, taken])}"
return None
return None
for proxy in tst():
print(proxy)
我得到的输出
51.155.10.0:8000
178.128.96.80:7497
98.162.96.41:4145
27-oct-2022 11:05 (49 mins ago)
27-oct-2022 11:04 (50 mins ago)
27-oct-2022 11:03 (51 mins ago)
所以我使用下面这个正则表达式从输出中捕获组
(\w+[.]\w+[.]\w+[.]\w+[:]\w+)|(\w+.*)
我想要这样的结果,如何从输出中合并它?
157.245.247.84:7497 - 27-oct-2022 11:05 (49 mins ago)
184.190.137.213:8111 - 27-oct-2022 11:04 (50 mins ago)
202.149.89.67:7999 - 27-oct-2022 11:03 (51 mins ago)
4条答案
按热度按时间lyr7nygr1#
假设您(编辑过的)问题顶部的代码具有运行良好的正则表达式,和它们运行相同数量的匹配,您可以使用
zip
:irtuqstp2#
这种方法将所有行读入一个列表,然后依次迭代IP行和日期行以生成输出。
这将打印:
请注意,此答案假定每个IP行始终只有一个匹配的日期行。它还假定这些行是有序的,并且所有IP行都在日期行之前。
gstyhher3#
如果文本保证包含N行IP地址,后面跟着N行“时间戳”,那么您可以这样做:
输出:
dl5txlt94#
使用正则表达式