Python 匹配str.extract方法中的子字符串

Python 匹配str.extract方法中的子字符串,python,regex,string,pandas,Python,Regex,String,Pandas,我有一个字符串,看起来像: 29818-218705-61709-2 我想提取两个破折号之间从第二位到最后5位的数字 61709 每个字符串都包含在一个系列中: 我想到了: df.id.str.extract(r'[.-]([0-9]{5})[.-]?') 但它提取前5个数字组 我可以配我想要的吗?你可以用 [.-]([0-9]{5})[.-][0-9]+$ 看 详细信息: [.-]-a或-分隔符 ([0-9]{5})-第1组捕获5位数字 [.-]-还是一个分隔符 [0-9]+

我有一个字符串,看起来像:

29818-218705-61709-2    
我想提取两个破折号之间从第二位到最后5位的数字

61709
每个字符串都包含在一个系列中:

我想到了:

df.id.str.extract(r'[.-]([0-9]{5})[.-]?')
但它提取前5个数字组

我可以配我想要的吗?

你可以用

[.-]([0-9]{5})[.-][0-9]+$

详细信息

  • [.-]
    -a
    -
    分隔符
  • ([0-9]{5})
    -第1组捕获5位数字
  • [.-]
    -还是一个分隔符
  • [0-9]+
    -1+位
  • $
    -字符串结束
多亏了
$
锚定,末尾的数字组是匹配的

另一种方法是利用回溯:

^.*[.-]([0-9]{5})[.-]


^..*
将尽可能多地匹配字符串开头除换行符以外的任何0+字符,因此最后一个
-|。
+
5位
+
-|。
匹配。

可以使用
拆分

df.id.str.split('-').str[-2]

演示

df = pd.DataFrame(dict(id=['29818-218705-61709-2'] * 1000)) 
df.id.str.split('-').str[-2].head()

0    61709
1    61709
2    61709
3    61709
4    61709
Name: id, dtype: object
您可以尝试:

>>> s = "29818-218705-61709-2 "
>>> s.split("-")[2]
'61709'

我的想法是一样的;)很高兴它对你有用。如果它对你有帮助,请考虑回答。