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个字符。
答案 0 :(得分:3)
问题是您没有使用“或”(|
),而是使用了冒号;尝试使用:
\d{7}|\d{5}
它应该返回您字符串中的数字。
答案 1 :(得分:1)
您也可以尝试使用\d{5,7}
之类的数字,表示介于5到7(含)之间的数字。
job_id = (''.join(re.search(r'(\d{5,7})',case1,re.I)))
默认行为是贪婪,这意味着它将匹配5到7位之间的尽可能多的数字。
编辑(另一个选项可能更容易理解,但会执行相同的操作):
job_id = re.search(r'(\d{5,7})',case1).group(1)
答案 2 :(得分: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'