Python正则表达式/结果中间词

时间:2018-09-05 12:30:48

标签: python regex

我对不必要的字符串产生了疑问。我只想从文件中提取https。 我的代码是:

import sys
import os
import hashlib
import re

if len(sys.argv) < 2 :
    sys.exit('Aby uzyc wpisz: python %s filename' % sys.argv[0])

if not os.path.exists(sys.argv[1]):
    sys.exit('BLAD!: Plik "%s" nie znaleziony!' % sys.argv[1])

with open(sys.argv[1], 'rb') as f:
    plik = f.read()
    print("MD5: %s" % hashlib.md5(plik).hexdigest())
    print("SHA1: %s" % hashlib.sha1(plik).hexdigest())
    print("SHA256: %s" % hashlib.sha256(plik).hexdigest())
    print("Podejrzane linki: \n")
    pliki = open(sys.argv[1], 'r')
    for line in pliki:
        if re.search("(H|h)ttps:(.*)",line):
            print(line)
        elif re.search("(H|h)ttp:(.*)",line):
            print(line)
    pliki.close()

结果:

MD5: f16a93fd2d6f2a9f90af9f61a19d28bd
SHA1: 0a9b89624696757e188412da268afb2bf5b600aa
SHA256: 3b365deb0e272146f00f9d723a9fd4dbeacddc10123aec8237a37c10c19fe6df
Podejrzane linki: 

        GrizliPolSurls = "http://xxx.xxx.xxx.xxx" 

        FilnMoviehttpsd.Open "GET", "https://xxx.xxx.xxx.xxx",False

我只需要""中的字符串,并且从httphttps开始,例如http://xxx.xxx.xxx.xxx

所需结果:

MD5: f16a93fd2d6f2a9f90af9f61a19d28bd
SHA1: 0a9b89624696757e188412da268afb2bf5b600aa
SHA256: 3b365deb0e272146f00f9d723a9fd4dbeacddc10123aec8237a37c10c19fe6df
Podejrzane linki: 
http://xxx.xxx.xxx.xxx
https://xxx.xxx.xxx.xxx

3 个答案:

答案 0 :(得分:2)

您可以将re.findall与以下正则表达式结合使用(在regex101上进行解释):

"([Hh]ttps?.*?)"

如此:

import re
s = '''MD5MD5:: f16a93fd2d6f2a9f90af9f61a19d28bd
SHA1 f16a93fd2 : 0a9b89624696757e188412da268afb2bf5b600aa
SHA256: 3b365deb0e272146f00f9d723a9fd4dbeacddc10123aec8237a37c10c19fe6df
Podejrzane linki: 

        GrizliPolSurls = "http://xxx.xxx.xxx.xxx" 

        FilnMoviehttpsd.Open "GET", "https://xxx.xxx.xxx.xxx",False'''
urls = re.findall('"([Hh]ttps?.*?)"', s)
#['http://xxx.xxx.xxx.xxx', 'https://xxx.xxx.xxx.xxx']

答案 1 :(得分:1)

您需要使用以下模式:(?<=")http[^"]+

(?<=")-向后看,以确定"是否占据了当前位置。

http-从字面上匹配http

[^"]+-匹配所有内容,直到",这是一种避免使用量词的否定类​​技术:)

Demo

答案 2 :(得分:0)

re.search()返回Match Object

您必须从结果中获取信息:

line = "my text line contains a http://192.168.1.1 magic url"
result = re.search("[Hh]ttps?://\d+\.\d+\.\d+\.\d+", line)
print(result.group())  # will print http://192.168.1.1