【发布时间】:2018-08-22 19:04:28
【问题描述】:
我正在尝试从 pandas 中非常混乱的字符串字段中提取型号。复杂之处在于,这些序列号不仅是数字,而且有时是字母数字。我想要完成的是创建一个正则表达式捕获组/组合,它允许我仅在字母字符连续位于之前、结尾或位于数字序列内时捕获它们:
model_number
part b: 101-03-0458B
B.2017Z brand name
brand - 027xY21
到
model_number_stripped
101030458B
B2017Z
027xY21
到目前为止,我有以下内容:
df['model_number_stripped'] = df['model_number'].str.replace('-','').str.replace('.','').str.replace('\D+','')
【问题讨论】:
-
这似乎很困难,因为第二行中的
B在技术上与2017Z并不相邻,但是您想要捕获它,而您不想捕获d在第三行中,也仅由数字中的特殊字符分隔。例如,如果第三行是brand.027xY21我只是看不出如何将其与第二行区分开来,除非您有一些额外的信息,例如您要捕获的字母字符将始终大写,并且可以最多只能连续 X 个。 -
这个问题太笼统了。 “部分”也是字母数字。 “品牌”也是如此。一个人应该怎么知道你在寻找什么样的代码。
-
@ALollz 是的,这很棘手。我修复了第三行示例以简化(因为它不会发生在真实数据集中)。没关系,所以去掉字符“。”和'-'首先。
-
@coldspeed 澄清一下,我希望它只保留字母字符,只要它们在去掉“。”后“触摸”数字。和 '-' 字符。
-
@WiktorStribiżew 很高兴并赞成。你给出了一个很好的综合答案。