You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中从大字符串提取<=左右两侧的所有值

提取字符串中<=两侧的值

我来帮你搞定这个需求!要从这类Graphviz风格的决策树字符串里提取所有<=左右的内容,正则表达式是最直接高效的方式,下面是具体的实现方案:

解决思路

我们需要精准匹配的模式是:

  • 左侧:类似X[2]、X[0]的特征标识,格式为「字母+[数字]」
  • 中间:可能带空格的<=符号
  • 右侧:整数或带小数点的数值

对应的正则表达式可以写成:(\w+\[\d+\])\s*<=\s*([\d.]+)

各部分的作用拆解:

  • (\w+\[\d+\]):专门捕获左侧的特征名,\w+匹配字母/下划线,\[\d+\]匹配[数字]的固定格式
  • \s*:匹配0个或多个空格,用来兼容<=前后可能存在的空格
  • <=\s*:匹配<=符号和它后面的空格
  • ([\d.]+):捕获右侧的数值,\d+匹配数字,\.匹配小数点,+表示至少出现一次

Python代码示例

import re

# 你的示例字符串
input_str = '''node [shape=box] ;
0 [label="X[2] <= 17055.5\ngini = 0.0454\nsamples = 43\nvalue = [42, 1]"] ;
1 [label="gini = 0.0\nsamples = 1\nvalue = [0, 1]"] ;
0 -> 1 [labeldistance=2.5, labelangle=45, headlabel="True"] ;
2 [label="gini = 0.0\nsamples = 42\nvalue = [42, 0]"] ;
0 -> 2 [labeldistance=2.5, labelangle=-45, headlabel="False"] [label]="X[0] <= 5.41" ;'''

# 执行正则匹配
pattern = r'(\w+\[\d+\])\s*<=\s*([\d.]+)'
matches = re.findall(pattern, input_str)

# 整理成你需要的分组结果
left_values = [match[0] for match in matches]
right_values = [match[1] for match in matches]

print("左侧值:", left_values)
print("右侧值:", right_values)

运行结果

执行代码后会输出你想要的内容:

左侧值: ['X[2]', 'X[0]']
右侧值: ['17055.5', '5.41']

扩展说明

如果你的字符串里还有其他格式的左侧内容(比如不带括号的变量名),可以调整正则表达式。比如如果左侧是任意非空白字符直到<=,可以把左侧捕获组改成([^\s"]+)(加上"是为了排除引号干扰),根据实际场景微调就能适配更多情况。

内容的提问来源于stack exchange,提问作者Ara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:43:34