Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 4, 2007 21:25:04

mario
От:
Зарегистрирован: 2007-08-04
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение. Вывод по строке

Добрый день.
Изучаю питон и разбираюсь в регулярными выражениями.
Вы не могли бы подсказать, как реализовывать обработку текста, который сообщается в некую переменную, по определённое строке. Например:

пример строки: “ANOTHER_TEXT1 EXAMPLE=12553 ANOTHER_TEXT2”

Как зацеплять то только EXAMPLE=12553 из всего выдаваемого? (example - постоянный текст, то что после равно - изменяется) .

На PERL реализовал так:

#!/usr/bin/perl
use strict;
use warnings;

my $a = “xe1\xab\xae \xa1\xa0\xa9\xe2=32 \xa2\xe0\xa5\xac\xef<1\xac\xe1 EXAMPLE=12553\r\n', ‘\x8e\xe2\xa2\xa5\xe2 \xae\xe2 10.222.1.62: \xe7\xa8\xe1\xab\xae \xa1\xa0\xa9\xe2=32 \xa2\xe0\xa5\xac\xef<1\xac\xe1 EXAMPLE=12553\r\n’, '\x8e\xe2\xa2\xa5\x”;

$a =~ /.+TTL=(\d+)/;

print $1;

Выведет EXAMPLE=12553.
Как это сделать на питоне?
С уважением, mario.



Отредактировано (Авг. 4, 2007 21:25:33)

Офлайн

#2 Авг. 4, 2007 21:35:41

alafin
Root
От: Киев, Украина
Зарегистрирован: 2006-04-06
Сообщения: 756
Репутация: +  3  -
Профиль   Отправить e-mail  

Регулярное выражение. Вывод по строке

Ну если регулярками то можно так

import re
str = “ANOTHER_TEXT1 EXAMPLE=12553 ANOTHER_TEXT2”
txt = re.findall('(EXAMPLE=\d+)', str)
print txt



Офлайн

#3 Авг. 4, 2007 22:12:56

mario
От:
Зарегистрирован: 2007-08-04
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение. Вывод по строке

Спасибо вам огромное!



Офлайн

#4 Авг. 4, 2007 22:20:08

mario
От:
Зарегистрирован: 2007-08-04
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение. Вывод по строке

Извините, а в качестве str, может быть обработан stdout.readlines() ?



Офлайн

#5 Авг. 4, 2007 22:32:05

alafin
Root
От: Киев, Украина
Зарегистрирован: 2006-04-06
Сообщения: 756
Репутация: +  3  -
Профиль   Отправить e-mail  

Регулярное выражение. Вывод по строке

Если ты подразумеваешь вот это:
>>> str = raw_input()
“ANOTHER_TEXT1 EXAMPLE=12553 ANOTHER_TEXT2”
>>> txt = re.findall('(EXAMPLE=\d+)', str)
>>> txt


То да, это будет работать



Офлайн

#6 Авг. 4, 2007 22:39:52

mario
От:
Зарегистрирован: 2007-08-04
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение. Вывод по строке

А что-то типо
stdin, stdout = win32pipe.popen2(“ping -i 255 1.1.1.1”)
t = stdout.readlines()
x = str(t)
txt = re.findall('(TTL=\d+)', x)
print txt

не работает … не знаете как решитьб? тобишь вывести TTL со значением



Офлайн

#7 Авг. 4, 2007 22:49:16

alafin
Root
От: Киев, Украина
Зарегистрирован: 2006-04-06
Сообщения: 756
Репутация: +  3  -
Профиль   Отправить e-mail  

Регулярное выражение. Вывод по строке

Ну во-первых
>>> import re
>>> import win32pipe
>>> stdin, stdout = win32pipe.popen2(“ping -i 255.1.1.1”)
>>> t = stdout.readlines()
>>> t


t - это список. Наверно не совсем корретно его переводить в строку. Чтобы из списка достать строку, для данного случая, нужно сделать так
>>> t
'\x8d\xa5\xae\xa1\xe5\xae\xa4\xa8\xac\xae \xe3\xaa\xa0\xa7\xa0\xe2\xec \xa0\xa4\xe0\xa5\xe1 IP.\r\n'

Во-вторых в возвращаемой конструкции вообще нет даже и упоминания о TTL.



Офлайн

#8 Авг. 4, 2007 22:58:16

alafin
Root
От: Киев, Украина
Зарегистрирован: 2006-04-06
Сообщения: 756
Репутация: +  3  -
Профиль   Отправить e-mail  

Регулярное выражение. Вывод по строке

Ты по всей видимости не правильную команду даешь ping -i 255.1.1.1



Офлайн

#9 Авг. 4, 2007 23:01:26

mario
От:
Зарегистрирован: 2007-08-04
Сообщения: 43
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярное выражение. Вывод по строке

Сама констуркция с пайпами пашет, модули я подклчил, у меня только в парсинге проблема.



TTL там есть, как раз -i указывает на число жизни пакета, да и в выводе пинга:
ответ от IP: число_байт время TTL=

Спасибо вам за совет со списком!



Офлайн

#10 Авг. 4, 2007 23:11:55

alafin
Root
От: Киев, Украина
Зарегистрирован: 2006-04-06
Сообщения: 756
Репутация: +  3  -
Профиль   Отправить e-mail  

Регулярное выражение. Вывод по строке

Простой вариант выглядит так(взял 3 элемент списка):

import re
str =
txt = re.findall('(TTL=\d+)', str)
print txt

Результат:



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version