regex - 正则表达式
问题描述
这是部分数据
Broan 抽油烟机 (BP130WWN) - 白色 Broan 抽油烟机 (BP130BLN) - 黑色 Broan 抽油烟机 (GP124WWN) - 白色 Broan 抽油烟机 (GP130WWN) - 白色 Broan 抽油烟机 (QS130WWN) - 白色 Broan 抽油烟机 (QS130BLN) - 黑色 Broan 抽油烟机 (QS130SSN) - 不锈钢 Broan 抽油烟机 (QS230WWN) - 白色 Broan 抽油烟机 (QS230BLN) - 黑色 Broan 抽油烟机 (QS230SSN) - 不锈钢 Broan 抽油烟机 (QS330WWN) - 白色 Broan 抽油烟机 (QS330BLN) - 黑色 Broan 抽油烟机 (QS330SSN) - 不锈钢 Broan 抽油烟机 (E66130SSL) - 不锈钢 Broan 抽油烟机 (RM503004) - 不锈钢 Broan 抽油烟机 (273003) - 不锈钢
我想删除(RM503004)
,(273003)
里面可能包含 3 到 11 个字母数字代码()
使用 Python 我可以像下面这样使用它:
text = re.sub('[a-zA-Z0-9]{3,11}', ' ', dataset['Title'][i])
但它的输出并不如预期,这将是:
Broan 抽油烟机 - 白色 Broan 抽油烟机 - 黑色 Broan 抽油烟机 - 白色 Broan 抽油烟机 - 白色 Broan 抽油烟机 - 白色 Broan 抽油烟机 - 黑色 Broan 抽油烟机 - 不锈钢 Broan 抽油烟机 - 白色 Broan 抽油烟机 - 黑色 Broan 抽油烟机 - 不锈钢 Broan 抽油烟机 - 白色 Broan 抽油烟机 - 黑色 Broan 抽油烟机 - 不锈钢 Broan 抽油烟机 - 不锈钢 Broan 抽油烟机 - 不锈钢 Broan 抽油烟机 - 不锈钢
解决方案
如此接近,只需添加转义的括号:
\([a-zA-Z0-9]{3,11}\)\s*
测试
import re
string = '''
Broan Range Hood (BP130WWN) - White
Broan Range Hood (BP130BLN) - Black
Broan Range Hood (GP124WWN) - White
Broan Range Hood (GP130WWN) - White
Broan Range Hood (QS130WWN) - White
Broan Range Hood (QS130BLN) - Black
Broan Range Hood (QS130SSN) - Stainless
Broan Range Hood (QS230WWN) - White
Broan Range Hood (QS230BLN) - Black
Broan Range Hood (QS230SSN) - Stainless
Broan Range Hood (QS330WWN) - White
Broan Range Hood (QS330BLN) - Black
Broan Range Hood (QS330SSN) - Stainless
Broan Range Hood (E66130SSL) - Stainless
Broan Range Hood (RM503004) - Stainless
Broan Range Hood (273003) - Stainless
'''
expression = r'\([a-zA-Z0-9]{3,11}\)\s*'
print(re.sub(expression, '', string))
输出
Broan Range Hood - White
Broan Range Hood - Black
Broan Range Hood - White
Broan Range Hood - White
Broan Range Hood - White
Broan Range Hood - Black
Broan Range Hood - Stainless
Broan Range Hood - White
Broan Range Hood - Black
Broan Range Hood - Stainless
Broan Range Hood - White
Broan Range Hood - Black
Broan Range Hood - Stainless
Broan Range Hood - Stainless
Broan Range Hood - Stainless
Broan Range Hood - Stainless
如果您希望简化/更新/探索表达式,它已在regex101.com的右上角面板中进行了说明。如果您有兴趣,可以在此调试器链接中观看匹配步骤或修改它们。调试器演示了 RegEx 引擎如何逐步使用一些示例输入字符串并执行匹配过程。
推荐阅读
- prolog - Prolog:为谓词中的变量赋值
- javascript - 我找不到我的不和谐机器人中的错误
- javascript - 为什么在php中使用cropper js上传图像时需要不工作
- vue.js - 同源策略不允许读取远程资源(原因:缺少 CORS 标头“Access-Control-Allow-Origin”)
- authentication - 无法对 Azure AD 中的自定义 API 进行身份验证(JWT 令牌问题)
- java - Comparator.comparing() 函数使用 lambda 和方法引用返回不同的结果
- android - 尝试使用自定义相机应用程序拍照时获取 E/Camera:错误 2 和 E/Camera:错误 1
- android - sqlite 中的子查询。计算组中选定项目的数量
- ruby - 当每个单词中有多个元音时,如何获得正确的输出?我的代码仅适用于每个单词中的一个元音
- python - Discord 语音对象没有“播放”属性