我要从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?谢谢
答案 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]
-n
或N
\d
-一个数字\S*
-0个或多个非空白字符