使用str.extract方法匹配Pandas中的子字符串



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

29818-218705-61709-2    

我想提取两个破折号之间的第二个到最后5位数字

61709

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

我想出了:

df.id.str.extract(r'[.-]([0-9]{5})[.-]?')

但是它提取前5位数字组

我可以匹配我想要的那个吗?

您可以使用split

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'

您可以使用

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

查看这个正则表达式演示

:

  • [.-] - a .-分离器
  • ([0-9]{5}) -组1捕获5位数字
  • [.-] -还是分隔符
  • [0-9]+ -1+数字
  • $ -字符串结束

由于$锚,位于末尾的数字组被匹配。

另一种方法是利用回溯:

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

查看这个演示

^.*将从字符串的开始匹配除换行符以外的任何0+字符,尽可能多,因此匹配最后的-|. + 5 digits + -|.

最新更新