首页 > 解决方案 > Python Regex-保持字母字符连续相邻/在数字序列内

问题描述

我正在尝试从熊猫中非常混乱的字符串字段中提取型号。复杂的是,这些序列号不仅是数字,而且有时是字母数字。我想要完成的是创建一个正则表达式捕获组/组合,它允许我仅在字母字符连续之前、结尾或在数字序列内时捕获它们:

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+','')

标签: pythonregexpandas

解决方案


您可以使用

df['model_number_stripped'] = df['model_number'].str.replace(r'\W+|(?<!\d)[^\W\d_](?![^\s\d]*\d)', '')

看到这个正则表达式演示

细节

  • \W+- 除字母、数字和之外的 1 个或多个字符_(如果要删除_,请使用[\W_]+
  • |- 或者
  • (?<!\d)[^\W\d_](?![^\s\d]*\d)- 任何[^\W\d_]前面没有数字 ( (?<!\d)) 且后面没有任何 0+ 字符的字母 ( ),除了空格和数字 ( [^\s\d]*) 后跟数字 ( \d)。请注意,这(?<!\d)是一个负面的向后看,紧靠当前位置的左侧,需要没有数字。如果在当前位置的右侧立即找到它的模式,则该(?![^\s\d]*\d)模式是一个否定的前瞻,它会导致匹配失败。

推荐阅读