首页 > 解决方案 > 正则表达式从最后一个连字符中提取前 5 个数字+字符

问题描述

我正在尝试从最后一个连字符中提取前 5 个字符+数字。这是示例

  1. 字符串 -- X008-TGa19-ER751QF7

输出——X008-TGa19-ER751

  1. 字符串 -- X002-KF13-ER782cPU80

输出——X002-KF13-ER782

我的尝试——我可以设法从最后一个元素——(\w+)[^-.]*$

但是现在如何取前 5 个,然后将我的整个值作为输出返回,如示例所示。

标签: pythonregex

解决方案


您可以选择-从字符串的开头重复 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}(?=[^-]*$)

正则表达式演示


推荐阅读