我正在尝试从熊猫中一个非常混乱的字符串字段中提取型号。复杂的是,这些序列号不仅是数字,而且有时是字母数字。我要完成的工作是创建一个正则表达式捕获组/组合,使我仅在字符连续,连续或位于数字序列内部时才捕获它们:
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+','')
答案 0 :(得分:1)
您可以使用
df['model_number_stripped'] = df['model_number'].str.replace(r'\W+|(?<!\d)[^\W\d_](?![^\s\d]*\d)', '')
查看此regex demo
详细信息
\W+
-除字母,数字和_
以外的1个或更多字符(如果要删除_
,请使用[\W_]+
)|
-或(?<!\d)[^\W\d_](?![^\s\d]*\d)
-不带数字([^\W\d_]
且不带空格和数字({{1})以外的任何0+字符的任何字母((?<!\d)
) })后跟数字([^\s\d]*
)。请注意,\d
后面是负数,它紧靠当前位置的左侧,要求缺少数字。 (?<!\d)
模式为否定超前行为,如果在当前位置的右侧立即找到其模式,则匹配失败。