如何在python正则表达式中找到字符串的特定部分?

时间:2018-09-25 16:48:42

标签: python

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个字符。

3 个答案:

答案 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'