Python中如何用多种随机混合的分隔符分割字符串?
用Python提取混杂分隔符下的日期、型号、品牌、年份信息
针对这类分隔符混乱(空格、逗号、冒号混用)且字段长度不固定的字符串,最可靠的处理方式是用正则表达式匹配字段的固定模式,不用纠结分隔符的具体类型。
先明确字段规律
以示例字符串"Mar 17 1997 H569, CAT: 2022"为例,核心结构是:
- 日期:开头的「3字母月份缩写 + 数字日期 + 4位年份」组合
- 型号:日期后的一串标识(可能带末尾逗号)
- 品牌:冒号前的名称
- 年份:冒号后的4位数字
实现代码
直接用正则匹配整体结构,提取对应字段:
import re # 获取用户输入 user_input = input("请输入包含信息的字符串:") # 定义正则,适配多种分隔符情况 pattern = r"^(\w{3} \d{1,2} \d{4}) ([^,:]+)[,:]?\s*(\w+)\s*:\s*(\d{4})$" match_result = re.match(pattern, user_input) if match_result: date = match_result.group(1) model = match_result.group(2).strip() # 去除可能的首尾空格 make = match_result.group(3) year = match_result.group(4) # 按要求格式输出 print(f"date: {date}") print(f"model: {model}") print(f"make: {make}") print(f"year: {year}") else: print("输入格式不符合要求,请检查后重试。")
正则规则解释
^(\w{3} \d{1,2} \d{4}):匹配开头的日期,捕获为第1组(支持1-2位的日期数字)([^,:]+):匹配型号,捕获为第2组,允许型号包含除逗号、冒号外的任意字符(比如连字符、点)[,:]?\s*:忽略型号末尾可能带的逗号/冒号,以及后续的任意空格(\w+)\s*:\s*:匹配品牌,捕获为第3组,忽略品牌与冒号之间的空格(\d{4})$:匹配末尾的4位年份,捕获为第4组
常见场景适配
如果型号是带特殊字符的格式(比如X-789、A.B123),上述正则也能正常提取;如果日期的数字日期是单个数字(比如Mar 5 1997),同样可以匹配。
内容的提问来源于stack exchange,提问作者Star Ali World
相关产品推荐
相关产品推荐

