Python正则表达式保持字母字符连续相邻/在数字序列内部

时间:2018-08-22 19:04:29

标签: python regex 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+','')

1 个答案:

答案 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)模式为否定超前行为,如果在当前位置的右侧立即找到其模式,则匹配失败。