如何提取字符串中间特定子串后的逗号分隔数字序列?
解决方案
方法一:解析为Python字典(推荐)
这个字符串本质是Python字典的字符串表示,直接解析成字典取值是最可靠的方式,能避免正则表达式可能遇到的边界问题。
import ast # 原始字符串 str_data = "{'Port': '2', 'Array': '[0, 0]', 'Field': '[2,2]', 'foo': '[0, 0]' , 'bar': '[9, 9]'}" # 解析为字典对象 data_dict = ast.literal_eval(str_data) # 获取Field对应的值 field_value = data_dict['Field'] # 若需要去掉方括号,执行以下步骤 field_value_no_brackets = field_value.strip('[]') print(field_value) # 输出: [2,2] print(field_value_no_brackets) # 输出: 2,2
方法二:使用正则表达式
如果必须用正则,可通过匹配'Field'键后的单引号包裹内容来提取值,这个正则能兼容键值对在字符串任意位置的情况:
import re str_data = "{'Port': '2', 'Array': '[0, 0]', 'Field': '[2,2]', 'foo': '[0, 0]' , 'bar': '[9, 9]'}" # 匹配Field对应的取值 match_result = re.search(r"'Field':\s*'([^']+)'", str_data) if match_result: field_value = match_result.group(1) field_value_no_brackets = field_value.strip('[]') print(field_value) # 输出: [2,2] print(field_value_no_brackets) # 输出: 2,2
正则说明
'Field':精准匹配目标键\s*匹配键和值之间任意数量的空格,处理格式差异'([^']+)'捕获单引号内的所有内容,即Field对应的值,包含方括号、逗号和数字
你之前用的'Port':\ .([0-9]+)仅适配单个数字的取值,且固定匹配空格+单个数字,无法兼容带方括号的多数字序列,所以对Field的情况不适用。
内容的提问来源于stack exchange,提问作者nir
相关产品推荐
相关产品推荐

