正则表达式从最后一个连字符中提取前5位+字符

2024-10-03 21:34:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从最后一个连字符中提取前5个字符+数字。 这是一个例子

  1. 串X008-TGa19-ER751QF7

输出——X008-TGa19-ER751

  1. 管柱--X002-KF13-ER782cPU80

输出——X002-KF13-ER782

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

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


Tags: 元素示例数字字符例子个字符设法x008
3条回答

如果您对非正则表达式解决方案开放,则可以使用基于拆分切片连接字符串的解决方案:

>>> my_str = "X008-TGa19-ER751QF7"

>>> '-'.join(s[:5] for s in my_str.split('-'))
'X008-TGa19-ER751'

在这里,我基于连字符-分割字符串,分割字符串以获得每个子字符串最多五个字符,然后使用str.join()将其连接回来以获得所需格式的字符串

^(.*-[^-]{5})[^-]*$ 捕获组1是您需要的

https://regex101.com/r/SYz9i5/1

解释

^(.*-[^-]{5})[^-]*$
^                    Start of line
 (                   Capture group 1 start
  .*                 Any number of any character
    -                hyphen
     [^-]{5}         5 non-hyphen character
            )        Capture group 1 end 
             [^-]*   Any number of non-hyphen character
                  $  End of line

另一个更简单的是

^(.*-.{5}).*$

这应该是直截了当的

这是利用第一个.*的贪婪行为匹配,它将尝试尽可能多地匹配,因此-将是后面至少有5个字符的最后一个。 https://regex101.com/r/CFqgeF/1/

(\w+-\w+-\w{5})似乎抓住了你的要求。
例子: https://regex101.com/r/PcPSim/1

相关问题 更多 >