如何拆分键内包含下划线的下划线分隔键值对字符串?
拆分含下划线键的键值对字符串方案
一、正则表达式方法
核心思路是只匹配那些作为键值对分隔符的下划线——也就是后面紧跟「合法键(含字母、数字、下划线)+等号」的下划线,用正向预查实现精准匹配。
正则表达式
_(?=[A-Za-z0-9_]+=)
_:匹配目标下划线;(?=[A-Za-z0-9_]+=):正向预查,确保下划线后续内容是「字母/数字/下划线组成的键 + 等号」,避免误拆分键内部的下划线。
代码示例(Python)
import re input_str = "C_OPS_CITY=SFO_C_OPS_SITE_INDICATOR=Office_IDENTITYCATEGORY=Employee_C_OPS_COMPANY=My Company_" # 先去除末尾多余的下划线 cleaned_str = input_str.rstrip('_') # 执行拆分 key_value_pairs = re.split(r'_(?=[A-Za-z0-9_]+=)', cleaned_str) print(key_value_pairs)
执行后输出:
['C_OPS_CITY=SFO', 'C_OPS_SITE_INDICATOR=Office', 'IDENTITYCATEGORY=Employee', 'C_OPS_COMPANY=My Company']
二、非正则表达式方法
通过遍历字符串手动判断下划线是否为分隔符,步骤如下:
- 先去除字符串末尾的多余下划线;
- 遍历字符串,遇到下划线时,检查后续内容是否符合「键+等号」格式;
- 若符合则拆分当前键值对,更新起始位置继续遍历;
- 遍历结束后加入最后一组键值对。
代码示例(Python)
input_str = "C_OPS_CITY=SFO_C_OPS_SITE_INDICATOR=Office_IDENTITYCATEGORY=Employee_C_OPS_COMPANY=My Company_" cleaned_str = input_str.rstrip('_') key_value_pairs = [] start_idx = 0 str_length = len(cleaned_str) for i in range(str_length): if cleaned_str[i] == '_': # 查找下划线后第一个等号的位置 next_eq_pos = cleaned_str.find('=', i + 1) if next_eq_pos != -1: # 验证等号前的内容是否为合法键(仅含字母、数字、下划线) candidate_key = cleaned_str[i+1:next_eq_pos] if all(c.isalnum() or c == '_' for c in candidate_key): # 拆分当前键值对 key_value_pairs.append(cleaned_str[start_idx:i]) start_idx = i + 1 # 加入最后一组键值对 key_value_pairs.append(cleaned_str[start_idx:]) print(key_value_pairs)
执行后同样能得到预期的键值对数组。
内容的提问来源于stack exchange,提问作者Sudhik
相关产品推荐
相关产品推荐

