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

标签 python regex pandas

我正在尝试从 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+','')

最佳答案

您可以使用

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_] ) 且后面没有除空格和数字 ( (?<!\d) ) 之外的任何 0+ 字符且后跟数字 ( [^\s\d]* ) 的任何字母 ( \d )。请注意(?<!\d)是一个负向后查找,紧邻当前位置的左侧,需要缺少数字。 (?![^\s\d]*\d)模式是一个否定的前瞻,如果在当前位置的右侧立即找到其模式,则匹配失败。

关于Python 正则表达式 - 保持字母字符连续相邻/在数字序列内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51973529/

相关文章:

python - 从二维角度数组创建颜色编码图像

python - 在 Pandas 的整个列中计算字符串的出现次数

java - 如何仅接受 JTextField 中的指定模式?

regex - Bash 使用 cut 获取字段

python - Pandas - 通过在另一个数据框中查找来替换值

python - 如何使用我的 imshow 情节设置 xticks 和 yticks?

python - 检测 python 字符串的开头

用于 Clojure 的 Python StringIO

python - 将函数应用于列的所有元素(字符串列表)以转换为 float

python - 字符串类型列中的舍入 pandas 数据框数值