Python - értelmező felett bekezdésesszöveg

szavazat
0

célom az, hogy hozzon létre egy szöveges elemző a fájl, amely többszörös vonalakon adatok:

Applying option loglevel (set logging level) with argument debug.
Successfully parsed a group of options.
Parsing a group of options: input url http://prod7.team.cn/test/tracks-v1a1/mono.
Successfully parsed a group of options.
Opening an input file: http://prod7.team.cn/test/tracks-v1a1/mono
[NULL @ 000001e002039000] Opening 'http://prod7.team.cn/test/tracks-v1a1/mono' for reading
[http @ 000001e00203a040] Setting default whitelist 'http,https,tls,rtp,tcp,udp,crypto,httpproxy'
[tcp @ 000001e00203ba80] Original list of addresses:
[tcp @ 000001e00203ba80] Address 92.223.97.22 port 80
[tcp @ 000001e00203ba80] Interleaved list of addresses:
[tcp @ 000001e00203ba80] Address 92.223.97.22 port 80
[tcp @ 000001e00203ba80] Starting connection attempt to 92.223.97.22 port 80
[tcp @ 000001e00203ba80] Successfully connected to 92.223.97.22 port 80
[http @ 000001e00203a040] request: GET /test/tracks-v1a1/mono HTTP/1.1

User-Agent: Lavf/58.31.101

Accept: */*

Range: bytes=0-

Connection: close

Host: prod7.team.cn

Icy-MetaData: 1

Minden fájl tartalmazhat több sor ilyen információkat. Célom az, hogy megtaláljuk minden „Sikeresen conneted” IP-cím, majd a házigazda részletesen évig LF.

Az említett esetben érvényes mérkőzés legyen IP 92.223.97.22 HOST prod7.team.cn

Azt könnyen talál az IP egy regex, de nem értem, hogyan lehet létrehozni egy érvényes meccs kihagyás további vezetékek évig „host”.

A kérdést 10/10/2019 00:53
a forrás felhasználó
Más nyelveken...                            


2 válasz

szavazat
0

Tudtam, hogy rendezni végre beágyazott Regex:

ip_list = []
    regex = r'connected(.*?)Host[^\n]+$'
    text_as_string = open('C:\\temp\\log.txt', 'r').read()
    matches = re.finditer(regex, text_as_string, re.DOTALL | re.MULTILINE)
    for matchNum, match in enumerate(matches, start=1):
        block = str(match.group())
        #print connected IP
        ip = re.compile('(connected to).[0-9]+(?:\.[0-9]+){3}.port.*')
        for match in re.finditer(ip, block):
            f_id=match.group()
        #print connected host
        host = re.compile('Host[^\n]+$')
        for match in re.finditer(host, block):
            f_host=match.group()
        if f_id =='':
            f_id='NA'
        if f_host =='':
            f_host='NA'
        ip_list.append([f_id,f_host])
    unique_ip = reduce(lambda l, x: l if x in l else l+[x], ip_list, [])
Válaszolt 10/10/2019 15:38
a forrás felhasználó

szavazat
0

https://docs.python.org/3.7/library/re.html#re.MULTILINE

Azt szeretné futtatni a regex többsoros mód, amely lehetővé teszi, hogy megfeleljen felett sortöréseket. Akkor jönne valami hasonló .*, hogy rögzítse a köztes.

A kikötés észre, hogy akkor biztos, hogy ellenőrizze, hogy biztos, hogy nem befut egy új megfelelő kezdet. Mint CA.*Bfelelne mind CAB és CACB és CACAB. Tehát valószínűleg lesz akar kifejezetten ellenőrizze a regex, hogy ne lépjék túl az elején egy érvényes meccset a .*.

Válaszolt 10/10/2019 01:07
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more