mario
Авг. 4, 2007 21:25:04
Добрый день.
Изучаю питон и разбираюсь в регулярными выражениями.
Вы не могли бы подсказать, как реализовывать обработку текста, который сообщается в некую переменную, по определённое строке. Например:
пример строки: “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.
alafin
Авг. 4, 2007 21:35:41
Ну если регулярками то можно так
import re
str = “ANOTHER_TEXT1 EXAMPLE=12553 ANOTHER_TEXT2”
txt = re.findall('(EXAMPLE=\d+)', str)
print txt
mario
Авг. 4, 2007 22:12:56
Спасибо вам огромное!
mario
Авг. 4, 2007 22:20:08
Извините, а в качестве str, может быть обработан stdout.readlines() ?
alafin
Авг. 4, 2007 22:32:05
Если ты подразумеваешь вот это:
>>> str = raw_input()
“ANOTHER_TEXT1 EXAMPLE=12553 ANOTHER_TEXT2”
>>> txt = re.findall('(EXAMPLE=\d+)', str)
>>> txt
То да, это будет работать
mario
Авг. 4, 2007 22:39:52
А что-то типо
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 со значением
alafin
Авг. 4, 2007 22:49:16
Ну во-первых
>>> 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.
alafin
Авг. 4, 2007 22:58:16
Ты по всей видимости не правильную команду даешь ping -i 255.1.1.1
mario
Авг. 4, 2007 23:01:26
Сама констуркция с пайпами пашет, модули я подклчил, у меня только в парсинге проблема.
TTL там есть, как раз -i указывает на число жизни пакета, да и в выводе пинга:
ответ от IP: число_байт время TTL=
Спасибо вам за совет со списком!
alafin
Авг. 4, 2007 23:11:55
Простой вариант выглядит так(взял 3 элемент списка):
import re
str =
txt = re.findall('(TTL=\d+)', str)
print txt
Результат: