Использование re.findall для сопоставления строки в html - PullRequest
0 голосов
/ 07 февраля 2019

Я хочу использовать re.findall() для сопоставления экземпляров названий компаний с веб-сайта обзора.Например, я хотел бы записать имена в список, подобный приведенному в примере ниже:

website_html = ', Jimmy Bob's Tune & Lube, Allen's Bar & Grill, Joanne's - Restaurant,'
name_list = re.findall('[,]\s*([\w\'&]*\s?)*[,]', website_html)

Мой код не перехватывает никаких шаблонов.Есть идеи?

1 Ответ

0 голосов
/ 07 февраля 2019

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

# I replace the single quotes at the start and end of your input, because 
# Bob's throws a SyntaxError: invalid syntax
# 
website_html = ", Jimmy Bob's Tune & Lube,"

# I removed re.findall, because you only had one example so re.search or 
# re.match works.  
name_list = re.search(r'[,]\s*([\w\'&]*\s?)*[,]', website_html)

print (name_list.group(0))
# output
, Jimmy Bob's Tune & Lube,

Если у вас есть дополнительные входные значения в website_html, укажите их, чтобы я мог изменить свой ответ.

Вот версия, которая использует re.findall.

# I replace the single quotes at the start and end of your input, because 
# Bob's throws a SyntaxError: invalid syntax
# 
website_html = ", Jimmy Bob's Tune & Lube,"

# I wrapped your pattern as a capture group
name_list = re.findall(r'([,]\s*([\w\'&]*\s?)*[,])', website_html)

print (type(name_list))
# output 
<class 'list'>

print (name_list)
# output 
[(", Jimmy Bob's Tune & Lube,", '')]

ОБНОВЛЕННЫЙ ОТВЕТ

Этот ответ основан на измененном вводе вашего исходного вопроса.

website_html = ", Jimmy Bob's Tune & Lube, Allen's Bar & Grill, Joanne's - Restaurant,"
name_list = re.findall(r'[?:,].*[?:,]', website_html)
for item in name_list:
  split_strings = (str(item).split(','))
  for string in split_strings:
     print (string)

     # output 
     Jimmy Bob's Tune & Lube
     Allen's Bar & Grill
     Joanne's - Restaurant
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...