Найти - Пользователи
Полная версия: Опять регулярные выражения
Начало » Python для новичков » Опять регулярные выражения
1
roggerg
После парсинга сайта у меня получился список строк такого вида
 '5X\xa0\xa0\n\n\xa0\n\n\n\n\n\n3/31/2007\n2\n5\n16\n36\n40\n\xa0\n36\n\xa0\n\n\n\xa0\r\n'
Мне нужно забрать только дату и шесть чисел т.е.
 ['3/31/2007', '2', '5', '16', '36', '40', '36']
для даты у меня есть регулярка вида
 r = r"\d{1,2}\/\d{1,2}\/\d{4}"
Числа могут быть в диапозоне от 0 до 99, пять чисел идет сразу после даты а перед последним числом (здесь это 36) идет выражение \n\xa0\n, которое надо пропустить
Я думал использовать (.) т.к. это вроде любой символ кроме переноса строки (\n), но у меня что-то не получается. Или думал после даты использовать (\d{1,2}), но тоже захвата не получилось. Можно сделать
через (\d+) и дальше обработать результат, но это как-то не красиво.
Вообщем прошу помощи в составлении регулярки.

roggerg
Составил в итоге такое выражение
  r = r'(\d{1,2}\/\d{1,2}\/\d{4})\n(\d{1,2})\n(\d{1,2})\n(\d{1,2})\n(\d{1,2})\n(\d{1,2})\n\xa0\n(\d{1,2})'
на выходе получился список с кортежем
 [('3/31/2007', '2', '5', '16', '36', '40', '36')]
В принципе уже лучше, но хотелось бы получить список строк.
Romissevd
 st = "5X\xa0\xa0\n\n\xa0\n\n\n\n\n\n3/31/2007\n2\n5\n16\n36\n40\n\xa0\n36\n\xa0\n\n\n\xa0\r\n"
print(re.findall(r'(?<=\n)(\d{1,2})+?(?!\/)', st))
roggerg
Romissevd
Спасибо, только как теперь это все совместить чтобы дата тоже захватывалась и на выходе получалось бы
  ['3/31/2007', '2', '5', '16', '36', '40', '36']
marvellik
а регулярка обязательна?
 >>> n =  '5X\xa0\xa0\n\n\xa0\n\n\n\n\n\n3/31/2007\n2\n5\n16\n36\n40\n\xa0\n36\n\xa0\n\n\n\xa0\r\n'
>>> print(n.split()[1::])
['3/31/2007', '2', '5', '16', '36', '40', '36']
Romissevd
roggerg
Спасибо, только как теперь это все совместить чтобы дата тоже захватывалась и на выходе получалось бы
 print(re.findall(r'(?<=\n)(\d{1,2}\/\d{1,2}\/\d{4}|\d{1,2})+?(?!\/)', st))
marvellik предложил Вам более лаконичное решение, если Вам не обязательна регулярка
roggerg
marvellik
Спасибо, отличное решение
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