Задать вопрос
@chevylevel
Java newbee

Как составить регулярное выражение python?

есть строка вида:
''first:
числа через запятую

second:
числа через запятую"
никак не могу сообразить, как нужно написать регулярное выражение, чтобы собрать отдельно все числа first и second в 2 разных списка.
first=re.findall('\d+', data)
собирает все числа.
Если так:
first=re.findall('(\d+)\n\nsecond', data)
то помещает в переменную first только последнее число из first в общем списке data.
  • Вопрос задан
  • 327 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@abcd0x00
Сначала надо отыскать нужные строки, а потом их разбирать.
Код
>>> import re
>>> 
>>> text = """
... abc
... first:
... 10, 20, 30, 40, 50
... 
... def
... second:
... 600, 700, 800, 900, 1000
... 
... ghi
... """
>>> 
>>> list(map(re.compile(r'\d+').findall,
...          re.findall(r'(?:\d+(?:, )?)+', text)))
[['10', '20', '30', '40', '50'], ['600', '700', '800', '900', '1000']]
>>>

Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
sgjurano
@sgjurano
Разработчик
next_line_is_first, next_line_is_second = False, False
first, second = [], []

for line in file:
    if next_line_is_first:
        first = line.split(,)
        next_line_is_first = False

    if next_line_is_second:
        second = line.split(,)
        next_line_is_second = False

    if 'first:' in line:
        next_line_is_first = True

    if 'second:' in line:
        next_line_is_second = True

print first, second


Вообще, имеет смысл отдавать себе отчет в том, когда стоит использовать регулярные выражения. Далеко не всегда это оправдано.

Поставьте себя на место человека, который будет вынужден вникать в ваш код.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы