2024-10-03 21:34:27 发布
网友
我试图从最后一个连字符中提取前5个字符+数字。 这是一个例子
输出——X008-TGa19-ER751
输出——X002-KF13-ER782
我的尝试--我可以设法从最后一个--(\w+)[^-.]*$获取元素
(\w+)[^-.]*$
但是现在如何获取前5,然后返回整个值作为输出,如示例所示
如果您对非正则表达式解决方案开放,则可以使用基于拆分、切片和连接字符串的解决方案:
>>> my_str = "X008-TGa19-ER751QF7" >>> '-'.join(s[:5] for s in my_str.split('-')) 'X008-TGa19-ER751'
在这里,我基于连字符-分割字符串,分割字符串以获得每个子字符串最多五个字符,然后使用str.join()将其连接回来以获得所需格式的字符串
-
str.join()
^(.*-[^-]{5})[^-]*$ 捕获组1是您需要的
^(.*-[^-]{5})[^-]*$
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
(\w+-\w+-\w{5})
如果您对非正则表达式解决方案开放,则可以使用基于拆分、切片和连接字符串的解决方案:
在这里,我基于连字符
-
分割字符串,分割字符串以获得每个子字符串最多五个字符,然后使用str.join()
将其连接回来以获得所需格式的字符串^(.*-[^-]{5})[^-]*$
捕获组1是您需要的https://regex101.com/r/SYz9i5/1
解释
另一个更简单的是
^(.*-.{5}).*$
这应该是直截了当的
这是利用第一个
.*
的贪婪行为匹配,它将尝试尽可能多地匹配,因此-
将是后面至少有5个字符的最后一个。 https://regex101.com/r/CFqgeF/1/(\w+-\w+-\w{5})
似乎抓住了你的要求。例子: https://regex101.com/r/PcPSim/1
相关问题 更多 >
编程相关推荐