根据给定的格式将字符串分成列表

时间:2010-12-22 12:29:36

标签: python

我有一个像"SAB_bARGS_D"这样的字符串。我想要的是字符串被分成字符列表,但只要有_符号,下一个字符就会被附加到前一个字符。

所以上面的答案应该是['S','A','B_b','A','R','G','S_D']

可以通过使用遍历列表的for循环来完成,但是我可以使用内置函数.....

非常感谢


更新

大家好

感谢Robert Rossneyaaronasterling我得到了必要的答案,但我有一个完全相似的问题,我只会在这里问一下......让我们说现在我的字符串有了标题它可以有一个字母或一个字母后跟_和一个数字.....我现在如何将字符串分成列表......现在不能使用建议的解决方案,因为S_10将分成S_1和0 ......如果有人能用RE来告诉你如何这样做会很有帮助....非常感谢....

3 个答案:

答案 0 :(得分:5)

我知道,我会使用正则表达式:

>>> import re
>>> pattern = "[^_]_[^_]|[^_]"
>>> re.findall(pattern, "SAB_bARGS_D", re.IGNORECASE)
['S', 'A', 'B_b', 'A', 'R', 'G', 'S_D']

模式尝试连续匹配3个字符 - 非下划线,下划线,非下划线 - 如果失败,则尝试匹配非下划线字符。

答案 1 :(得分:2)

我可能会使用for循环。

def a_split(inp_string):
    res = []
    if not inp_string: return res  # allows us to assume the string is nonempty

    # This avoids taking res[-1] when res is empty if the string starts with _
    # and simplifies the loop.
    inp = iter(inp_string)   
    last = next(inp)
    res.append(last)

    for c in inp:
        if '_' in (c, last): # might want to use (c == '_' or last == '_')
            res[-1] += c
        else:
            res.append(c)
        last = c
    return res

您可以在本地变量中存储res.append并直接引用它而不是引用局部变量res,然后执行属性查找以获取{{}},从而获得一些性能提升。 1}}方法。

如果有像append这样的字符串,则不会拆分。在这种情况下没有指定任何行为,但是要修改它以做其他事情并不困难。此外,'a_b_c'这样的字符串也会分为'_ab'['_a', 'b']也是如此。

答案 2 :(得分:1)

使用正则表达式

>>> import re
>>> s="SAB_bARGS_D"
>>> re.findall("(.(?:_.)?)",s)
['S', 'A', 'B_b', 'A', 'R', 'G', 'S_D']