regex dlia python

Тема в разделе "WASM.BEGINNERS", создана пользователем md5, 28 июл 2009.

  1. md5

    md5 New Member

    Публикаций:
    0
    Регистрация:
    26 июн 2009
    Сообщения:
    8
    Код (Text):
    1. import urllib2, re
    2. f = urllib2.urlopen("http://www.malwaredomainlist.com/update.php")
    3. s = f.read()
    4. print s[:200]
    5. m = re.findall("[0-9][0-9][0-9]\.[0-9][0-9][0-9]\.[0-9][0-9][0-9]\.[0-9][0-9][0-9]",s)
    6. print m
    i paluciaju:

    Код (Text):
    1. ['200.160.204.195', '213.251.176.169', '213.251.176.169', '201.144.241.226', '201.144.241.226', '201.144.241.226', '210.174.202.189', '213.182.197.249']
    varpos: kak mne palucit vse IP a ne tolko te IP u katorih po 3 cifri v kazdom pole? dobafka {1-3} nepomogajet, proboval:

    Код (Text):
    1. m = re.findall("[0-9][0-9][0-9]{1-3}\.[0-9][0-9][0-9]{1-3}\.[0-9][0-9][0-9]{1-3}\.[0-9][0-9][0-9]{1-3}",s)
    togda nicevo nepaluciaju :dntknw:
     
  2. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    Окей. Один может получить великолепное регулярное выражение для вытаскивания IP, выполнив ультимативный квест:

    Код (Text):
    1. xor eax, eax
    2. mov [4], eax
    3. lea rax, [rax - $0E97CCC8]
    4. mov ecx, $21336430
    5. mov qword [0], rax
    6. xadd [4], ecx
    7. mov rdx, qword [0]
    8. lea rax, [rcx + rdx]
    9. ret
    Код (Text):
    1. def decode(s, key):
    2.     rez = ''
    3.     for i in range(len(s)):
    4.         rez = rez + chr(ord(s[i]) ^ (key >> (8 * (i % 8))) & 0xFF)
    5.     return rez
    6.  
    7. x = 'CA\x01\x90TD\x0e\x01E\x11@\xd9\x02Qh\x11\x1a\x065\xd8LL\x01z\x07\x1e\\\xacl\x00\x1a]\x1fhX\xdc\x019\x0c}SHY\xdd\x02\x19\x1a\x08\x159\x1a\x94W\x01K\x01\n\x13\x1a\xd3\x18L\x0c\x1d\x16o\x0c\xd8\x18F\x13\n\x17G\x1a\x98Q\x00\x13\n\x17AJ\xaa\x1e9\x1aZ\x04NJ\xd1\x1bDGS^R\x0c\xd1\x1bDA\x03\x1f\x0cI\xadTM\x1a\x03'
    8.  
    9. print(decode(x, rax))
     
  3. milo

    milo New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2009
    Сообщения:
    43
    а можно просто (приведу только регулярку):
    regex = "\d{1-3}(\.\d{1-3}){3}"
    или
    regex = "(\d{1-3})\.(\d{1-3})\.(\d{1-3})\.(\d{1-3})"
    второй вариант будет проще, т.к. гораздо удобней будет впоследствии получить доступ к байта ip-адреса.
    ps. у тебя регулярка неправильно была составлена просто, вот и не получалось ;)
     
  4. e4key

    e4key New Member

    Публикаций:
    0
    Регистрация:
    28 июл 2009
    Сообщения:
    101
    Во 2 случае не получилось, т.к. ты писал [0-9][0-9][0-9]{1-3} это значит, что должны идти три цифры подряд и этот блок из 3 цифр может повторяться от 1 до 3 раз. В данном случае можно записать [0-9]{1,3} или как предложил milo с \d ([0-9] и \d - аналоги).
     
  5. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    У нас ультимативнее :)
    Например, в тексте "12233.45.11.56" нет IP. Также его нет в тексте "12.56.12.1134" или в "268.12.13.14".