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

пример строки: “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
Ну если регулярками то можно так

import re
str = “ANOTHER_TEXT1 EXAMPLE=12553 ANOTHER_TEXT2”
txt = re.findall('(EXAMPLE=\d+)', str)
print txt
mario
Спасибо вам огромное!
mario
Извините, а в качестве str, может быть обработан stdout.readlines() ?
alafin
Если ты подразумеваешь вот это:
>>> str = raw_input()
“ANOTHER_TEXT1 EXAMPLE=12553 ANOTHER_TEXT2”
>>> txt = re.findall('(EXAMPLE=\d+)', str)
>>> txt


То да, это будет работать
mario
А что-то типо
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
Ну во-первых
>>> 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
Ты по всей видимости не правильную команду даешь ping -i 255.1.1.1
mario
Сама констуркция с пайпами пашет, модули я подклчил, у меня только в парсинге проблема.



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

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

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

Результат:
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