Найти - Пользователи
Полная версия: Работа с регулярным выражением
Начало » Python для экспертов » Работа с регулярным выражением
1
mario
Добрый день. Пожалуйста, подскажите. Есть такие записи:

Info: system
User: /misha/
User: /grisha/
User: /_vania/
User: /alex/
User: /nastya/
User: /oleg/
User: /_july/
User: /software/download/
User: /tools/_services/download/
Group: school

Нужно выцеплять только то, что стоит после User: .
Сделал следующее выражение: txt = re.findall('(User: \w+)', str(f))

r = ‘ewewwe User: 4dsdsds fff df df User: 2323 \nsdsdds’
txt = re.findall('(User: \w+)', str(f))
print txt

На примере 1 строки - работает.

Но, при обработке файла - нет.

f = urllib.urlopen("http://ресурс/db.txt")
line = f.read()
txt = re.findall('(User: \w+)', str(line))
print txt

Подскажите пожалуйста, как решить вопрос - в регулярках не очень силён, извиняйте.
bw
re.findall('User: (/.*/)$', text, re.M)
..bw
izekia
bw
re.findall('User: (/.*/)$', text, re.M)
..bw
а почему бы не просто ‘User: (.*?)$’ при re.MULTILINE | re.DOTALL
правда автор не объяснил как быть со слешами
bw
Я заметил что слеши обязательно присутствуют в имени. В случае не корректной записи (отсутствие слешев, не предусмотренные предшествующие символы). Например, такой вариант был бы еще точнее, и работал бы максимально правильно в неизвестных ситуациях:
re.findall('User:\s*(/.*/)\s*$', text, re.M)
Т.е. теперь перед именем и после него могут распологаться “незначащие” символы (пробелы) в любом количестве. Ведь человеки не предают большое значение этим символам и могут напихать их в любом количестве, не задумавась над проблемами машины.

..bw
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB