如何用正则表达式解码加密字符串并生成DataFrame?
处理固定格式用户数据生成DataFrame
思路
先过滤出以AN04N01开头的有效行,剔除开头7位标识后,按照字段规则提取name、surname、DOB,最后组装成DataFrame。
方法一:正则表达式提取
利用正则捕获组直接匹配目标字段内容,代码简洁高效:
import pandas as pd import re # 匹配有效行的正则模式,直接捕获三个字段的内容 pattern = re.compile(r'AN04N0101\d{2}(.{5})02\d{2}(.{5})03\d{2}(.{8})') data = [] # 替换为你的实际数据文件路径 with open('user_data.txt', 'r') as f: for line in f: line = line.strip() match_result = pattern.match(line) if match_result: data.append({ 'name': match_result.group(1), 'surname': match_result.group(2), 'DOB': match_result.group(3) }) # 生成DataFrame df = pd.DataFrame(data) print(df)
方法二:按规则逐段解析(适配字段变化)
如果后续字段长度、顺序可能调整,这种方法扩展性更强:
import pandas as pd data = [] with open('user_data.txt', 'r') as f: for line in f: line = line.strip() if not line.startswith('AN04N01'): continue # 去掉开头的7位标识 content = line[7:] user_info = {} current_idx = 0 while current_idx < len(content): # 提取列标识(前2位) col_id = content[current_idx:current_idx+2] # 提取内容长度(接下来2位) content_len = int(content[current_idx+2:current_idx+4]) # 提取对应长度的内容 value = content[current_idx+4:current_idx+4+content_len] # 映射到列名 if col_id == '01': user_info['name'] = value elif col_id == '02': user_info['surname'] = value elif col_id == '03': user_info['DOB'] = value # 移动索引到下一个字段起始位置 current_idx += 4 + content_len data.append(user_info) df = pd.DataFrame(data) print(df)
说明
- 方法一适合字段规则固定的场景,代码更简洁;方法二能应对字段顺序、长度变更的情况,灵活性更高。
- 记得把代码中的
user_data.txt替换为你的实际数据文件路径。
内容的提问来源于stack exchange,提问作者cRIsP
相关产品推荐
相关产品推荐

