Форум сайта python.su
Добрый день.
Я опрашиваю коммутатор по телнету и получаю большую строку, которую могу поделить на строки и получить список строк. Критерием деления является 2 символа \n\r и split('\n\r') замечательно делит мне строки. Но в некоторых случаях коммутатором выдается строка начинающаяся с ескейп-последовательности \x1b и содержащая ее несколько раз. Как мне вырезать всю это строку? Подскажите пож-ста!
Офлайн
lstrip('\x1b')
Офлайн
PooHНеподходит, мне не символ в начале строки вырезать надо, а всю строку от символа \x1b до символов \n\r. Причем символов \x1b в этой строке может быть несколько.
lstrip('\x1b')
Офлайн
spritePooHНеподходит, мне не символ в начале строки вырезать надо, а всю строку от символа \x1b до символов \n\r. Причем символов \x1b в этой строке может быть несколько.
lstrip('\x1b')
Может я несовсем правильно объяснил ситуацию. У меня есть переменная string, очень большая, она содержит текст состоящий из форматированных строк, с признаком конца \n\r. Методом split я могу поделить эту строку на список строк, и дальше обрабатывать элементы этого массива как обычные строки. Но так-как в моей первоначальной строке содержится текст с эскейп последовательностями, полученный таким образом массив строк обрабатывается некорректно. Мне надо либо выкинуть эту строку из массива, как элемент списка, либо из первоначальной строки удалить текст форматированной строки содержащий символы эскейп последовательности (все что я о нем знаю, этот фрагмент текста начинается на \x1b и заканчивается на \n\r) и потом уже пользовать метод split. Как это сделать не могу придумать.
[i for i in string.split('\n\r') if '\x1b' not in i]
Офлайн
SyaoРешил проблему проще strOut = re.sub(r“\x1b.*\n\r”, r'', strOut)[i for i in string.split('\n\r') if '\x1b' not in i]
Офлайн
spriteа почему просто не
Решил проблему проще strOut = re.sub(r“\x1b.*\n\r”, r'', strOut)
[s.strip() for s in strOut.replace(chr(27), '').split('\r\n')]
Отредактировано (Апрель 14, 2010 02:21:50)
Офлайн
denzМожет и быстрее, попробую ваш рецепт обязательно. НО в моем случает не просто символ нужно выреазть, а всю строку в которой он содержится.spriteа почему просто не
Решил проблему проще strOut = re.sub(r“\x1b.*\n\r”, r'', strOut)побыстрее чем регекспами будет …[s.strip() for s in strOut.replace(chr(27), '').split('\r\n')]
Офлайн
самый просто вариант (в лоб)
for my_str in str_list:
if "\x1b" in my_str:
str_list.remove(my_str)
for i in xrange(len(str_list)):
if "\x1b" in str_list(i):
str_list.pop(i)
Отредактировано (Апрель 15, 2010 14:39:12)
Офлайн