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

Jupyter Dash文本输入转二维字符串列表:免手动加引号实现

解决Jupyter Dash无引号输入转二维字符串列表的问题

核心结论

Dash没有原生处理这种无引号结构化输入的方案,需要自行解析。以下提供两种简洁可靠的实现方式,避免繁琐的str.split()和str.replace()堆叠:


方案一:正则+ast.literal_eval(简洁鲁棒)

通过正则表达式批量为元素添加引号,再用ast.literal_eval安全解析成列表,代码简洁且兼容性强:

import re
import ast

def parse_dash_input(user_input):
    # 匹配每个[]内的元素组,为每个元素添加单引号
    quoted_content = re.sub(
        r'\[([^[\]]+)\]',
        lambda match: f"[{', '.join(f\"'{item.strip()}'\" for item in match.group(1).split(','))}]",
        user_input
    )
    # 包裹为完整列表并解析
    return ast.literal_eval(f"[{quoted_content}]")

# 测试示例
user_input = '[apple, orange, pear], [cabbage, lettuce]'
output_list = parse_dash_input(user_input)
print(output_list)  # 输出: [['apple', 'orange', 'pear'], ['cabbage', 'lettuce']]

说明

  • 正则表达式精准匹配每个方括号内的内容,可轻松扩展支持嵌套结构
  • ast.literal_eval比原生eval更安全,仅解析合法Python字面量,不会执行恶意代码

方案二:纯正则+手动解析(完全避免ast.literal_eval)

如果不想依赖解析工具,可直接用正则提取元素并手动组装二维列表:

import re

def parse_dash_input_no_eval(user_input):
    result = []
    # 提取所有[]内的元素字符串
    group_strings = re.findall(r'\[([^[\]]+)\]', user_input)
    for group in group_strings:
        # 分割元素、去空格后组成子列表,自动过滤空元素
        sub_list = [item.strip() for item in group.split(',') if item.strip()]
        result.append(sub_list)
    return result

# 测试示例
user_input = '[apple, orange, pear], [cabbage, lettuce]'
output_list = parse_dash_input_no_eval(user_input)
print(output_list)  # 输出: [['apple', 'orange', 'pear'], ['cabbage', 'lettuce']]

说明

  • 无第三方解析依赖,仅通过正则提取和列表推导完成转换
  • 自动处理用户输入中的多余逗号和空格,提升容错性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:10:32