在 Python 中将引号插入 2D 列表的字符串表示形式

Inserting quotes into the string representation of a 2D list in Python

提问人:dyslexic_donkey 提问时间:1/17/2023 最后编辑:deppermdyslexic_donkey 更新时间:1/21/2023 访问量:46

问:

我有从文本框中获取用户输入的代码,需要将其转换为字符串的二维列表。用户输入是 Jupyter Dash 文本输入

我正在尝试以这样一种方式设计它,即用户不需要自己引用元素,并且可以输入逗号分隔的单词

如果用户自己引用该元素,我会让它工作,但认为如果他们不必引用它会更干净

我可以用很多东西来做到这一点,但它显然非常凌乱,很容易破裂str.split()str.replace()

如果 Dash 有办法完全规避这个问题,我会非常感兴趣,但我找不到

当前功能
输入(外部引号不是由用户编写的,而是隐含的):

'["apple", "orange", "pear"], ["cabbage", "lettuce"]'

输出:
[["apple", "orange", "pear"], ["cabbage", "lettuce"]]

所需功能
输入(外部引号不是由用户编写的,而是隐含的):

'[apple, orange, pear], [cabbage, lettuce]'

输出:
[["apple", "orange", "pear"], ["cabbage", "lettuce"]]

我目前的解决方案如下:

user_input = f"[{user_input}]"`

我真的很想避免使用 但这是我找到的唯一解决方案,而不是过度的字符串操作literal_eval()

output_list = list(ast.literal_eval(user_input))
python 字符串 转换 用户输入 plotly-dash

评论

1赞 deceze 1/17/2023
如果您可以将输入接受为多行逗号分隔的字符串,这将是非常微不足道的。需要作为分隔符意味着您需要一个更复杂的解析器......(即使正则表达式在这里可能就足够了)[]

答:

0赞 sophros 1/21/2023 #1

您可以使用以下方法使用正则表达式模块 re

import re

input_str = '["apple", "orange", "pear"], ["cabbage", "lettuce"]'

lst2nd_level = []
for inner_list in re.findall('\[([\"a-z, ]+)\]', input_str):
    lst = list(re.findall('\"([a-z]+)\"', inner_list))
    lst2nd_level.append(lst)

print(lst2nd_level)

其中第一个正则表达式匹配字符串列表,第二个正则表达式匹配内部列表中的单词。