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[.-]
或
分隔符-
-第1组捕获5位数字([0-9]{5})
-还是一个分隔符[.-]
-1+位[0-9]+
-字符串结束$
$
锚定,末尾的数字组是匹配的
另一种方法是利用回溯:
^.*[.-]([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'
我的想法是一样的;)很高兴它对你有用。如果它对你有帮助,请考虑回答。