如何拆分包含名称与时间的组合字符串,提取名称和日期信息?
解决字符串拆分:提取名称和日期部分
嘿,我来帮你搞定这个字符串拆分的问题!你之前用split("-")的方法行不通,是因为日期本身包含横杠,拆分后会把日期的一部分也混进名称里,完全偏离了预期。下面给你两个靠谱的解决思路:
方法一:按下划线拆分后定位日期
你的目标字符串结构很清晰:名称部分由多个下划线连接的字段组成,后面跟着日期(格式是MM-DD-YYYY)和时间部分。我们可以先把整个字符串按下划线_拆分,再找到日期所在的片段,最后把前面的片段拼接回名称:
full_str = "cDOT_storage01_esx_infra02_07-19-2021_04.45.00.0478" # 按下划线拆分所有片段 parts = full_str.split("_") # 找到符合日期格式的片段(包含横杠且长度为10) date_index = next(i for i, part in enumerate(parts) if "-" in part and len(part) == 10) # 拼接前面的片段得到名称 name_part = "_".join(parts[:date_index]) # 直接提取日期片段 date_part = parts[date_index] print(name_part) # 输出: cDOT_storage01_esx_infra02 print(date_part) # 输出: 07-19-2021
方法二:用正则表达式精准匹配
如果你的字符串格式是固定的(名称 + _ + 日期 + _ + 时间),正则表达式会更高效,直接捕获你需要的两个部分:
import re full_str = "cDOT_storage01_esx_infra02_07-19-2021_04.45.00.0478" # 正则规则:匹配任意字符直到遇到_+日期格式+_,捕获名称和日期 pattern = r"(.*)_(\d{2}-\d{2}-\d{4})_" match_result = re.match(pattern, full_str) if match_result: name_part = match_result.group(1) date_part = match_result.group(2) print(name_part) # 输出: cDOT_storage01_esx_infra02 print(date_part) # 输出: 07-19-2021
为什么之前的方法失效?
你用j['name'].split("-")[0]得到的是cDOT_storage01_esx_infra02_07,因为第一个横杠出现在日期的07-19之间,拆分后会把日期的前两位也包含在结果里,这显然不是你要的名称部分。所以不能用横杠作为拆分依据,得换成本身不在名称里出现的分隔逻辑~
内容的提问来源于stack exchange,提问作者Ankur Wason
相关产品推荐
相关产品推荐

