Python:识别列表字符串中的区间并替换为区间内所有数字的方法
实现代码
直接用正则替换的回调机制完成区间展开,不需要额外做字符串拆分判断,代码如下:
import re def process_list(input_list): # 匹配"数字to数字"的模式,兼容to前后的空格 range_pattern = re.compile(r"(\d+)\s*to\s*(\d+)") # 区间展开回调:将匹配到的起止数字替换为完整的枚举数字串 def expand_match(match): start, end = map(int, match.groups()) return ",".join(map(str, range(start, end + 1))) # 逐个处理所有字符串,合并后提取全部数字 processed_content = " ".join([range_pattern.sub(expand_match, s) for s in input_list]) # 提取所有数字,可按需转成int类型 return re.findall(r"\d+", processed_content) # 测试示例 l = ["12,13,14,15", "12 to 18", "10,21,22 to 42", "14,48,52", "12,14,22;45 and also 24 to 32" ] print(process_list(l))
实现说明
- 不需要提前判断字符串是否包含
to,正则会自动匹配所有存在的区间格式完成替换,兼容人工输入的to前后多余空格 - 无需处理杂乱的分隔符和备注内容,最终直接通过数字匹配正则提取所有结果,容错性更高
- 区间默认按闭区间处理,若需要左闭右开可自行修改
range(start, end+1)为range(start, end)
内容的提问来源于stack exchange,提问作者Jules Spender
相关产品推荐
相关产品推荐

