比方说,有一个字符串可以是:
- “3d6”
- “t3d6”
- “3h4d6”
- “t3h4d6”
- “6 t3d6”
- “6 t3h4d6+6”和类似的可能变体。
有没有办法遍历字符串并根据它们是字母/数字/符号/其他内容将其中的项目添加到列表中?例如,"6 t3h10d6+6"
将导致 [6, "", "t", 3, "h", 10, "d", 6, "+", 6]
作为列表。
我正在开发一个电报机器人,它使用 python 通过骰子计算结果回答用户输入,最难的部分是处理用户输入。现在正在通过笨拙的 if 语句复杂处理输入。可能有更好的方法来处理用户输入,我很乐意听取您的建议!
与this question 不重复.问题是关于将字符串分解为字符列表,基本上将字符串转换为字符串列表。我的问题是关于将字符串分解为不同项目的列表,这些项目可以是字符串也可以是整数。
最佳答案
您也可以为此使用 regex
(通过指定查找所有数字和非数字字符):
>>> x
'6 t3h4df6d+!643'
>>> __import__("re").findall('\d+|\s+|\D+', x)
['6', ' ', 't', '3', 'h', '4', 'df', '6', 'd+!', '643']
如您所见,上面的表达式没有将 d
与 +!
分开。
如果这是一个问题,你可以稍微修改上面的规则
表达为:
>>> x = '6 t3h4df6d+!643'
>>> re.findall('\d+|\s+|[a-zA-Z]+|\D+', x)
['6', ' ', 't', '3', 'h', '4', 'df', '6', 'd', '+!', '643']
将它们完全分开!
更新
如果您想将字符串拆分为单个字符(例如 "xy"
为 ['x','y']
),您可以更改上面的 正则表达式
表达式为:
>>> x = '6 t3h4df6d+!643'
>>> __import__("re").findall('\d+|\s+|\w|\D+', x)
['6', ' ', 't', '3', 'h', '4', 'd', 'f', '6', 'd', '+!', '643']
关于python - 从字符串中添加不同的项目到列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46038766/