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 символов.
Проблема в том, что вы не используете "или" (|
), а вместо двоеточия; Попробуйте использовать:
\d{7}|\d{5}
Он должен вернуть номер в вашей строке.
Вы также можете попробовать что-то вроде \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)
Оба упомянутых выше ответа - это решение вашей проблемы, у меня возникает следующий вопрос:
>>> 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'
\d{7}|\d{5}
...