Как я могу найти определенную часть строки в регулярном выражении Python?

1
case1 = http:www.freejobalert.comupsc-advt-no-18337
case2 = http:www.freejobalert.comupsc-advt-no-1833742
job_id = (''.join(re.findall(r'\d{7}:\d{5}',case1,re.I)))

как я могу найти только 33742 из этой выше строки, используя регулярное выражение. число может быть 5 или 7 символов.

  • 1
    \d{7}|\d{5} ...
  • 1
    спасибо тебе .. это работает
Теги:

3 ответа

3

Проблема в том, что вы не используете "или" (|), а вместо двоеточия; Попробуйте использовать:

\d{7}|\d{5}

Он должен вернуть номер в вашей строке.

1

Вы также можете попробовать что-то вроде \d{5,7} означает от 5 до 7 (включительно) цифр.

job_id = (''.join(re.search(r'(\d{5,7})',case1,re.I)))

Поведение по умолчанию будет жадным, то есть оно будет соответствовать как можно большему количеству цифр от 5 до 7 цифр.

EDIT (Другой вариант, который может быть проще понять, но будет делать то же самое):

job_id = re.search(r'(\d{5,7})',case1).group(1)

0

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

>>> import re
>>> case1 = "http:www.freejobalert.comupsc-advt-no-18337"
>>> case2 = "http:www.freejobalert.comupsc-advt-no-1833742"
>>> job_id1 = (''.join(re.findall(r'\d{5,7}',case1,re.I)))
>>> job_id2 = (''.join(re.findall(r'\d{5,7}',case2,re.I)))
>>> job_id1
'18337'
>>> job_id2
'1833742'

>>> job_id3 = (''.join(re.findall(r'\d{5}|\d{7}',case1,re.I)))
>>> job_id4 = (''.join(re.findall(r'\d{5}|\d{7}',case2,re.I)))
>>> job_id3
'18337'
>>> job_id4
'18337'

Ещё вопросы

Сообщество Overcoder
Наверх
Меню