Нужно ли включать `r` перед поиском регулярных выражений? - PullRequest
0 голосов
/ 06 февраля 2019

Я хочу разделить термины по разделителю.Я хотел бы поставить число как index и имя как name.

Мои термины:

The Beehive
12. Bar 821
13. Natives Bar
14. Last Call Bar
15. Scarlet Lounge
16. Linden Room
17. Rooftop 25

Я использую этот код:

terms = ['The Beehive', '12. Bar 821', '13. Natives Bar', '14. Last Call Bar', '15. Scarlet Lounge', '16. Linden Room', '17. Rooftop 25']

delim = re.match('\d+\. ', terms)

if delim is None:
    print(delim)
else:
     index = index[:delim.end()]
     name = index[delim.end():]

Это не в состоянии захватить раскол.Я проверил это, напечатав разделитель, и он ничего не соответствует.

Ответы [ 2 ]

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

Функция match() принимает только отдельные строки, поэтому вам придется выполнять итерацию по terms отдельно:

>>> for term in terms:
...     match = re.match(r'^(?P<index>(\d+\. )?)(?P<name>.*)$', term)  # Return a match object which contains the named groups.
...     index, _, name = match.groups()  # Unpack the groups.
...     # index = match.group('index')
...     # name = match.group('name')
...     print(index, name)
... 
 The Beehive
12.  Bar 821
13.  Natives Bar
14.  Last Call Bar
15.  Scarlet Lounge
16.  Linden Room
17.  Rooftop 25

Также обратите внимание на использование groups в регулярном выражении, которое возвращает объект Group с именованными совпадениями.

Что касается использования префикса r'' или нет, взгляните на этот вопрос или этот отрывок из документов:

Префикс r, делающий литерал необработанной литеральной строкой, необходим […], потому что escape-последовательности в обычном «готовом» строковом литерале не распознаютсяPython, в отличие от регулярных выражений, теперь приводит к DeprecationWarning и в конечном итоге станет SyntaxError.См. Чума обратной косой черты .

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

Вы используете список по сравнению со строкой

import re
terms = ['The Beehive', '12. Bar 821', '13. Natives Bar', '14. Last Call Bar', '15. Scarlet Lounge', '16. Linden Room', '17. Rooftop 25']

delim = re.compile('\d+\.')
for term in terms:
    match = delim.search(term)
    if match:
        print(term[:match.end()]) #index
        print(term[match.end():]) #name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...