python - 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+','')
解决方案
您可以使用
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)
模式是一个否定的前瞻,它会导致匹配失败。
推荐阅读
- ios - 带有证书的推送通知到 iOS 错误
- android - Numberpad 的 Android 模拟器键盘输入不再起作用
- python - 如何解决 remove_widget 在 Kivy 的另一个布局中要删除的小部件
- reactjs - 重定向到用户在登录前尝试访问的同一页面 - Reactjs
- mysql - Google API 对 Google Cloud 上的 MySQL 代理的身份验证范围不足
- php - 在zend框架中从ajax获取数据时如何避免页眉和页脚html代码?
- amazon-web-services - Fargate 是无服务器容器意味着如果没有流量,我可以让 0 个容器工作?
- ruby-on-rails - Rails:如何使用左连接表急切加载?
- azure-active-directory - 将 Azure Data Lake Storage 用户权限与 Apache Ranger 和 Active Directory 同步
- android - 在 Jetbrain IDE 中,如何在方法参数悬停时显示警告?