正则表达式在一组数字中找到最后两个位置

时间:2018-08-11 18:06:17

标签: python regex python-3.x

我的电话号码格式如下:

02R-01240-250A
02R-01242-250
15-09110-200X
15-09110-212

我可以使用以下命令捕获中间的5位数字(始终为5):

([^-]+[0-9]{4})

但是我真的很想抓住这5个数字集的最后两位,并在我的Pandas数据框中添加一个新列。我还需要能够在中间找到一个新专栏。

3 个答案:

答案 0 :(得分:4)

如果模式保持不变,请尝试使用非regex的解决方案:

s = '02R-01240-250A'

print(s.split('-')[1][-2:])
# 40

答案 1 :(得分:2)

您可以使用

-[0-9]*([0-9]{2})-

请参见regex demo。捕获的数字将是连字符前的最后两位。要抓住最后两个数字之前的数字,请使用

-[0-9]*([0-9])[0-9]{2}-

请参见another regex demo

详细信息

  • --连字符
  • [0-9]*-零个或多个数字
  • ([0-9]{2})-捕获组1(使用extract时,即方法返回的值):两位数字后跟...
  • --连字符。

答案 2 :(得分:1)

尝试以下模式:

-[0-9]{2}[0-9]([0-9]{2})- #last two digits
-[0-9]{2}([0-9])[0-9]{2}- #middle digit

根据需要提取两件事,可以将两个捕获组与re.search()一起使用,以一次获取最后两位数字和中间数字。这就要求总是有五个数字,但是您说总是有五个数字。

s = re.search("-[0-9]{2}([0-9])([0-9]{2})-", your_string)
oneColumn = s.group(1) #middle digit
anotherColumn = s.group(2) #last two digits

模式中的括号包围了两个不同的捕获组。