演示
我有一个字符串看起来像:
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
+ -|.
。