【问题标题】:How do I split up the following Python string in to a list of strings?如何将以下 Python 字符串拆分为字符串列表?
【发布时间】:2020-06-20 05:42:16
【问题描述】:

我有一个字符串'Predicate(big,small)'

如何从中派生以下字符串列表,['Predicate','(','big',',','small',')']

名称可以是任何东西,元素之间也可以有空格(我需要从列表中取出空格),Predicate (big, small)

到目前为止我已经尝试过这个,但这显然不是我想要的结果

>>> str1 = 'Predicate(big,small)'
>>> list(map(str,str1))

输出:

['P', 'r', 'e', 'd', 'i', 'c', 'a', 't', 'e', '(', 'b', 'i', 'g', ',', 's', 'm', 'a', 'l', 'l', ')']

【问题讨论】:

    标签: python arrays python-3.x string list


    【解决方案1】:

    您可以使用re.split()() 上拆分您的字符串。您可以捕获正则表达式中的分隔符以将它们包含在最终输出中。结合str.strip() 处理空格并过滤掉任何结尾的空字符串,您会得到如下内容:

    import re
    
    s = 'Predicate ( big ,small )'
    [s.strip() for s in  re.split(r'([\(\),])', s.strip()) if s]
    # ['Predicate', '(', 'big', ',', 'small', ')']
    

    【讨论】:

    • 这看起来好多了。 +1 编辑了我的答案以不抓住空格;)
    • 感谢您的回答队友,我认为我说得不是很清楚,但我也希望将“,”作为列表中的一个元素,将列表元素“大, small' 改为三个元素:'big', ',' ,'small'
    • @Biggeez 是的,我没听懂。您可以将, 添加到正则表达式中。见编辑。
    【解决方案2】:

    您可以在此处使用re

    import re
    text='Predicate(big,small)'
    parsed=re.findall(r'\w+|[^a-zA-Z,\s])
    # ['Predicate', '(', 'big', 'small', ')']
    
    1. \w+ 匹配任何单词字符(等于[a-zA-Z0-9_])。
    2. [^a-zA-Z,\s] 匹配列表中不存在的单个字符。
    3. \s 用于匹配空间。

    【讨论】:

    • 你能解释一下第三行在做什么吗
    • 这似乎与 OP 中的要求有一些问题:(I need to have the whitespace taken out of the list) 给定一个类似'Predicate( big, small)' 的字符串
    • @MarkMeyer 可惜我错过了。我想添加\s 来不匹配空格就足够了。
    • @Biggeez 添加了解释。检查编辑的答案。
    • @Biggeez \w+ 也会匹配数字和下划线
    猜你喜欢
    • 2019-04-16
    • 2015-09-01
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 2021-12-18
    相关资源
    最近更新 更多