【发布时间】:2017-02-20 23:30:05
【问题描述】:
我有一个看起来像这样的字符串:
29818-218705-61709-2
我想提取两个破折号之间倒数第二个数字
61709
每个字符串都包含在一个熊猫系列中:
我想出了:
df.id.str.extract(r'[.-]([0-9]{5})[.-]?')
但它会提取前 5 位数字组。
我可以匹配我想要的吗?
【问题讨论】:
标签: python regex string pandas
我有一个看起来像这样的字符串:
29818-218705-61709-2
我想提取两个破折号之间倒数第二个数字
61709
每个字符串都包含在一个熊猫系列中:
我想出了:
df.id.str.extract(r'[.-]([0-9]{5})[.-]?')
但它会提取前 5 位数字组。
我可以匹配我想要的吗?
【问题讨论】:
标签: python regex string pandas
你可以使用
[.-]([0-9]{5})[.-][0-9]+$
详情:
[.-] - . 或 - 分隔符([0-9]{5}) - 第 1 组捕获 5 位数字[.-] - 又是一个分隔符[0-9]+ -1+ 位$ - 字符串结束。感谢$ 锚点,匹配最后的数字组。
另一种方法是利用回溯:
^.*[.-]([0-9]{5})[.-]
^.* 将尽可能多地匹配字符串开头除换行符以外的任何 0+ 字符,因此匹配最后一个 -|.+5 digits+-|.。
【讨论】:
你可以使用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'
【讨论】: