Захватить строку между \ n [string] \ n - PullRequest
1 голос
/ 16 октября 2019

Я пытаюсь разобрать описания YouTube песен для компиляции в .csv

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

Во-первых, я ловлю whitesapce

# catches whitespace
pattern = re.compile(r'\s+')

Во-вторых, временные коды (для упрощения работы со строкой)

# catches timecodes
pattern1 = re.compile(r'[\d\.-]+:[\d.-]+:[\d\.-]+')

, затем я добавляю и удаляю.

Затем я пытаюсь перехватить все строки между \ n, так как форматируется треклист

songBeforeDash = re.search(r'^([\\n][a-zA-Z0-9]*-[a-zA-Z0-9]*[\\n]*)+$', description)

Формат соответствует \ n [строка] - [строка] \ n

Используя этот превосходный визуализатор , я смог настроить его так, чтобы он ловил первый результат, однако любые последующие результаты не совпадают. Является ли это случаем остановки при первом результате, а не поимки других?

Вот пример того, что я пытаюсь поймать

\nmiddleschoolxAso-Cypress\nShopan-Woodnot\nchromonicci-Memories.\nYasper-MoveTogether\nFenickxDelayde-Longwayhome\nauv-Rockaway5pm\nsadtoi-Aires\nGMillsxKyleMcEvoy-Haze\nRuckP-CoffeeBreak\n

Ответы [ 2 ]

3 голосов
/ 16 октября 2019

Вы можете сделать это с помощью split ()

t = '\nmiddleschoolxAso-Cypress\nShopan-Woodnot\nchromonicci-Memories.\nYasper-MoveTogether\nFenickxDelayde-Longwayhome\nauv-Rockaway5pm\nsadtoi-Aires\nGMillsxKyleMcEvoy-Haze\nRuckP-CoffeeBreak\n'

liste = t.split('\n')
liste = liste[1:-1:]
print(liste)
2 голосов
/ 16 октября 2019

re.search возвращает только первое совпадение в строке. Вам нужно использовать re.findall , который возвращает все совпадения.


РЕДАКТИРОВАТЬ - поскольку ваши совпадения перекрываются, я бы предложил отредактировать регулярное выражение взахватить до следующего перевода строки. Прямо сейчас они не могут пересекаться. Попробуйте изменить это регулярное выражение на следующее:

r'^([\\n][a-zA-Z0-9]*-[a-zA-Z0-9]*)+$'

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

Кроме того, как предполагает @ChatterOne, использование метода str.split (seperator) будет хорошо работать здесь, при условии, что никакой другой тип информации отсутствует.

descriptor.split('\n')
...