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

时间:2016-10-12 08:28:36

标签: python regex string pandas

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

61709

我想提取两个破折号之间的倒数第二位数

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

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

我想出了:

{{1}}

但它会提取前5位数组。

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

3 个答案:

答案 0 :(得分:2)

您可以使用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

答案 1 :(得分:1)

您可以尝试:

app.module.ts

答案 2 :(得分:0)

您可以使用

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

请参阅this regex demo

<强>详情:

  • [.-] - .-分隔符
  • ([0-9]{5}) - 第1组捕获5位数字
  • [.-] - 再次成为分隔符
  • [0-9]+ -1+位数
  • $ - 字符串结束。

感谢$锚点,最后匹配的数字组。

另一种方法是利用回溯:

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

请参阅this demo

^.*将尽可能多地匹配字符串开头以外的任何0 +字符而不是换行符号,因此最后-|. + 5 digits + {{1}匹配。