繁体   English   中英

如何从python中的字符串中提取一定长度的数字? [重复]

[英]How to extract certain length of numbers from a string in python? [duplicate]

我有一个看起来像这样的数据框:

description     
1906 RES 330 ML
1906 RES 330ML
RES 335 c/6
RES 332 c/12

我想提取数字的三个连续数字并将其保存在新的“音量”列中。 我的代码是这样的:

df['volume'] = df['description'].str.extract('([([\d]*[\d]){3,3}?])')

预期结果应该是这样的:

volume
330
330
335
332

但是,它给出了这样的结果:

volume
1906
1906
335
332

谁能帮我修复这个代码? 非常感谢!!!

可能有点矫枉过正,但如果您想确保不捕获属于 4 位数字的数字,您可以使用以下命令:

df['volume'] = df.description.str.extract(r'(?<!\d)(\d{3})(?!\d)', expand=False)    
print(df)

       description volume
0  1906 RES 330 ML    330
1   1906 RES 330ML    330
2      RES 335 c/6    335
3     RES 332 c/12    332

指定expand=False ,以便匹配仅作为一个pd.Series返回。


正则表达式:

  • (?<!\\d) - 指定在一组 3 位数字之前的任何东西都不是数字
  • (\\d{3}) - 匹配 3 个数字
  • (?!\\d) - 指定一组 3 位数字之后的任何内容都不是数字

你需要

  • 不匹配任何数字,三次,所以删除[\\d]*
  • 不匹配任何看起来像“单词”的 3 位数字,
    尤其不是其他数字,所以使用词边界\\b
  • 不允许可选?
  • 不要过分字符集的事情[]

您不需要:

  • 使用两个捕获组()

此正则表达式将仅找到三位数字:

\b(\d{3})\b

您正在寻找的正则表达式是\\b[\\d]{3}\\b

有关\\b更多信息,请参阅文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM