Python使用正则表达式按6位数字加冒号规则分割字符串问题求解
解决方案
方法1:直接使用re.findall匹配目标片段(推荐)
直接写正则匹配所有符合要求的片段,不需要拆分后拼接,逻辑更简单:
import re my_str = '610640: 168 hours 610835: till next day 14:00 617041: 168 hours 611486:720 hours' # 正则说明:匹配6位数字+冒号,之后惰性匹配任意字符,直到遇到下一个「可选空格+6位数字+冒号」或者字符串结尾 result = re.findall(r'\d{6}:.*?(?=\s*\d{6}:|$)', my_str) print(result)
运行输出:
['610640: 168 hours', '610835: till next day 14:00', '617041: 168 hours', '611486:720 hours']
方法2:调整原有split代码,拼接捕获的分组
你原来的代码用split加捕获组后,得到的列表结构为[空字符串, 第一个ID加冒号, 第一个内容, 第二个ID加冒号, 第二个内容...],只需要跳过第一个空值,两两拼接即可:
import re my_str = '610640: 168 hours 610835: till next day 14:00 617041: 168 hours 611486:720 hours' match = re.split(r'(\d{6}:)', my_str) # 跳过第一个空元素,步长为2遍历拼接,同时去除内容前后多余空格 result = [match[i] + match[i+1].strip() for i in range(1, len(match), 2)] print(result)
运行结果和方法1完全一致。
内容的提问来源于stack exchange,提问作者imp
相关产品推荐
相关产品推荐

