LINUX.ORG.RU

(python) отлов по регэкспу и чистка массива


0

0

Помогите начинающему python-coder'у, пж.

Задача:

1 (регеэксп) Ловим в строке открывающую фразу в кавычках, делим строку по пробелу. Если нету кавычек - делим по первому пробелу.

2 (список) В результате работы регекспа получается список (с кортежем внутри), в котором имеются пустые значения. Приходится вычищать.

помогите написать нормальный регексп. можно ли почистить список как-то попроще? Заранее спасибо.

import re

r = '"im writing" some comment'

#r = 'im writing some comment' # альтернативная строка

patt = r"((^\".*?\")(.*$))|((^[^\"].*?) (.*))"

ss = re.compile(patt)

y = ss.findall(r) # ищем в строке совпадения с паттерном

x = list(y[0]) # переделываем вложенный кортеж в простой список

#print x

u = [] # новый список

for e in x: if e != '': # если элемент списка не пуст набиваем в новый список u.append(e)

print u

★★
Ответ на: комментарий от Sphinx

>The shlex module currently does not support Unicode input.

не годится. Все равно спасибо.

frpaul ★★
() автор топика
Ответ на: комментарий от DrLivsy

Большое спасибо!

[^ ]* - я читаю так: [нет пробела] + квантификатор (т.е. все символы, пока не встретится пробел. Правильно?

frpaul ★★
() автор топика
Ответ на: комментарий от frpaul

Верно, любой символ вплоть до первого пробела.

Насчёт операций со списками, вдруг понадобится, в питоне есть конструкция-oneliner (аналогичная эрлангу), list comprehension. Последнюю строку можно переписать так:

print [x for x in ss.match(r).groups() if x != None]

В результирующий список попадут элементы исходного, не равные None.

DrLivsy
()
Ответ на: комментарий от DrLivsy

А, я понял - это генератор списков, у Лутца читал про это.
Спасибо!

frpaul ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.