熊猫使用模式中的可选字符串提取子字符串

时间:2019-06-26 08:53:38

标签: regex python-3.x pandas

我要从df列“ Desc”中提取以n或N开头并跟一个数字的子字符串,这是带有我的代码和结果的测试df:

import pandas as pd
testdf = pd.DataFrame({'Desc': ['n1.2A Full Version', 'N5.0.0 Bridge', 'N5.35A Automatic', 'n2 Bridge']})
testdf['Version'] = testdf['Desc'].str.extract(r'([nN]\d.+?[\s])', expand=False)

如何修复正则表达式,使其在最后一条记录中不显示NaN?谢谢

1 个答案:

答案 0 :(得分:1)

主要问题是,.+?除了换行符char之外还需要至少1个字符,然后[\s]需要一个空格来匹配。因此,当[nN]\d匹配并消耗了n2时,正则表达式引擎会尝试将下一个空格与.+?匹配,然后[\s]无法匹配空白。

您可以使用

>>> testdf['Desc'].str.extract(r'([nN]\d\S*)', expand=False)
0     n1.2A
1    N5.0.0
2    N5.35A
3        n2

模式为[nN]\d\S*

  • [nN]-nN
  • \d-一个数字
  • \S*-0个或多个非空白字符

请参见online regex demoregex graph

enter image description here