Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式查找一组数字中的最后两个位置_Python_Regex_Python 3.x - Fatal编程技术网

Python 正则表达式查找一组数字中的最后两个位置

Python 正则表达式查找一组数字中的最后两个位置,python,regex,python-3.x,Python,Regex,Python 3.x,我有以下形式的数字: 02R-01240-250A 02R-01242-250 15-09110-200X 15-09110-212 我可以通过以下方式捕捉中间的5位数字(始终为5位): 但我真的很想抓住这个5位数集的最后两位,在我的数据框中创建一个新列。我还需要能够抓住中间的一个新列。您可以使用 -[0-9]*([0-9]{2})- 看。捕获的数字将是连字符前的最后两位。要获取最后两个数字之前的数字,请使用 -[0-9]*([0-9])[0-9]{2}- 看 详细信息 --连字符 [0

我有以下形式的数字:

02R-01240-250A
02R-01242-250
15-09110-200X
15-09110-212
我可以通过以下方式捕捉中间的5位数字(始终为5位):

但我真的很想抓住这个5位数集的最后两位,在我的数据框中创建一个新列。我还需要能够抓住中间的一个新列。

您可以使用

-[0-9]*([0-9]{2})-
看。捕获的数字将是连字符前的最后两位。要获取最后两个数字之前的数字,请使用

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

详细信息

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

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

s = '02R-01240-250A'

print(s.split('-')[1][-2:])
# 40
尝试以下模式:

-[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

模式中的括号将两个不同的捕获组括起来。

谢谢Wiktor。我可以在演示中看到结果,但我无法使用python 3.6版本在Regex Buddy中复制您的结果(我也尝试了2.7)。不知道为什么。正则表达式将如何更改为只获取中间数字?您在python脚本中测试过它吗?这应该适用于最后两位。@Kevin如果你发布了代码,我将能够提供一个直接的解决方案。Kamses..我能够在我的代码中使用你的解决方案,并且正则表达式返回我正在寻找的项目。谢谢我会接受答案。如果你发布代码,提供答案会更容易、更快。请下次再做。切片的好用。
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