Как выдернуть из строки нужный кусок, указав начало и конец области поиска

258 просмотра
0
0 Комментариев

Добрый день, у меня есть файл со строками такого вида:

96.246.236.151:3389;greenlightexp\admin;P@ssw0rd (greentech;Bazzz628) | Country: United States | State: New York | City: Long Island City | ZIP: 11101 | ISP: Verizon FiOS |

Мне нужно распарсить строку на отдельные составляющие: IP,PORT,login,pass

Я решил использовать библиотеку regex для python 2.7, т.к. с python уже раньше немного работал.

Я сумел найти IP-адрес следующим образом:

s = "96.246.236.151:3389;greenlightexp\admin;P@ssw0rd (greentech;Bazzz628) | Country: United States | State: New York | City: Long Island City | ZIP: 11101 | ISP: Verizon FiOS |"
pattern1 = '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'
ip = re.findall(pattern1, s)

Теперь хотелось бы найти другие данные — к примеру пароль. Но я не понимаю как задать параметр поиска, чтобы требуемый мне кусок текста шел после определенного символа или группы символов и заканчивался соответственно тоже каким-то условием.


Добавить комментарий

2 Answers

Python Опубликовано 12.12.2018
0

s = r"96.246.236.151:3389;greenlightexp\admin;P@ssw0rd (greentech;Bazzz628)    | Country: United States | State: New York | City: Long Island City | ZIP:  11101 | ISP: Verizon FiOS |"
# я понимаю, что логин - admin (т.е нужно пометить, что строка сырая)
pattern1 = r'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d{4});.*?\\(.+?);(.+?)\s'
# предположил, что пароль отделен пробелом
ip, port, login, passwd = re.findall(pattern1, s)[0]

Чтение файла построчно

with open("README.rst","rt") as fo :
   for line in fo.readlines():
       print line

Добавить комментарий
0

Если в паттерне задать какую-то подстроку в скобках, то findall будет выдавать список на единичный результат

s = "96.246.236.151:3389;greenlightexp\admin;P@ssw0rd (greentech;Bazzz628) | Country: United States | State: New York | City: Long Island City | ZIP: 11101 | ISP: Verizon FiOS |"
pattern = re.compile("(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):\d*;(.*?);(.*?)\s", re.DOTALL)
results = pattern.findall(s)
results # output: [('96.246.236.151', 'greenlightexp\x07dmin', 'P@ssw0rd')]

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up