python - 正则表达式从最后一个连字符中提取前 5 个数字+字符
问题描述
我正在尝试从最后一个连字符中提取前 5 个字符+数字。这是示例
- 字符串 -- X008-TGa19-ER751QF7
输出——X008-TGa19-ER751
- 字符串 -- X002-KF13-ER782cPU80
输出——X002-KF13-ER782
我的尝试——我可以设法从最后一个元素——(\w+)[^-.]*$
但是现在如何取前 5 个,然后将我的整个值作为输出返回,如示例所示。
解决方案
您可以选择-
从字符串的开头重复 a 和 1+ 个单词字符。然后匹配最后一个-
并匹配 5 个单词字符。
^\w+(?:-\w+)*-\w{5}
^
字符串的开始\w+
数学 1+ 字字符(?:-\w+)*
可选择重复-
和 1+ 字字符-\w{5}
匹配-
和 5 个单词字符
import re
regex = r"^\w+(?:-\w+)*-\w{5}"
s = ("X008-TGa19-ER751QF7\n"
"X002-KF13-ER782cPU80")
print(re.findall(regex, s, re.MULTILINE))
输出
['X008-TGa19-ER751', 'X002-KF13-ER782']
注意也\w
可以匹配_
。
如果字符串中还可以有其他字符,要获取除_
最后一个连字符之后的前 5 个数字或字符,您可以使用否定字符类匹配不带下划线的单词字符[^\W_]{5}
重复 5 次,同时断言右侧不再有下划线。
^.*-[^\W_]{5}(?=[^-]*$)
推荐阅读
- php - 需要帮助从数据库值创建会话
- c# - 如何仅检测相同颜色的碰撞?
- python - 气流 - 从父文件夹导入
- javascript - 从 Uint8Array 转换为字符串并返回
- visual-studio-2017 - TFS 2017 Visual Studio Build 任务不生成输出文件夹/文件
- elasticsearch - 限制匹配的过滤条件
- java - 如何在 Eclipse 中启动基于 SVM 的分类项目?
- macos - 如何从 VSCode 中删除项目快捷方式
- python - 无法使用标准方法将 MotorCursor 对象转换为异步函数中的列表
- java - Jodd:不要序列化空对象