python - 如何从python中的字符串中提取一定长度的数字?

标签 python regex string pandas dataframe

<分区>

我有一个如下所示的数据框:

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

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

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 位数字之后的任何内容都不是数字

关于python - 如何从python中的字符串中提取一定长度的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45925169/

相关文章:

Python:未绑定(bind)方法调用中参数 'filenames' 没有值

python - 如何一次从 Pandas 的所有列中删除逗号

c++ - 排除一种类型的模板

java - matches() 方法的模式匹配无法正常工作

c - 在 C 中执行大量字符串连接?

python - 可疑文件操作..加入的路径...位于基本路径组件之外

python - Argparse python,在帮助菜单中删除子解析器列表

python - 导入错误: DLL load failed: %1 is not a valid Win32 application for _imaging module

regex - 需要帮助制作正则表达式字符串

Python 正则表达式 - 识别列表中的第一项和最后一项