Как построить регулярное выражение для поиска слов, которые начинаются с `\ n` и буквы и заканчиваются цифрой ИЛИ словом? - PullRequest
0 голосов
/ 16 апреля 2019

Вот пример строки, интервал после цифры может отличаться.

product_list = 'Buy:\n Milk \nYoughurt 4 \nBread  \nSausages 4     \nBanana '

Я хочу построить регулярное выражение со следующим выводом:

import re

re.findall(r'some pattern', product_list)
['Milk', 'Youghurt 4', 'Bread', 'Sausages 4', 'Banana']

Вот так я и думал. Тем не менее, он возвращает пустой список:

re.findall(r'\n(\w+\w$))', product_list)

Ответы [ 3 ]

1 голос
/ 16 апреля 2019

Подход приведенного ниже сценария состоит в том, чтобы сначала удалить начальный term:\n в этом случае Buy:\n. Затем мы используем re.findall со следующим шаблоном, чтобы найти все совпадения:

(.+?)\s*(?:\n|$)

Это говорит о том, что нужно захватить что-либо до первого необязательного символа пробела, за которым следует новая строка или конец строки.

product_list = 'Buy:\n Milk \nYoughurt 4 \nBread  \nSausages 4     \nBanana '
product_list = re.sub(r'^[^\s]*\s+', '', product_list)

matches = re.findall(r'(.+?)\s*(?:\n|$)', product_list)
print(matches)

['Milk', 'Youghurt 4', 'Bread', 'Sausages 4', 'Banana']
1 голос
/ 16 апреля 2019

Я бы предложил использовать не-регулярное выражение (регулярное выражение кажется дорогим), если вы можете гарантировать аналогичную схему ввода:

list(map(lambda x: x.strip(), product_list.split('\n')))[1:]

Код

product_list = 'Buy:\n Milk \nYoughurt 4 \nBread  \nSausages 4     \nBanana '

print(list(map(lambda x: x.strip(), product_list.split('\n')))[1:])
# ['Milk', 'Youghurt 4', 'Bread', 'Sausages 4', 'Banana']
0 голосов
/ 16 апреля 2019

Этот пример можно выполнить без регулярного выражения, разделив его на :, а затем \n

actual_list = 'Buy:\n Milk \nYoughurt 4 \nBread  \nSausages 4     \nBanana '
product_list = actual_list.split(':')[1]
processed_list = [product.strip() for product in product_list.split('\n') if product.strip() != '']
print(processed_list)
#['Milk', 'Youghurt 4', 'Bread', 'Sausages 4', 'Banana']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...