在python中分割字符串的最有效方法,如rubik的立方体符号?

时间:2012-11-07 15:31:18

标签: python string split rubiks-cube

如果给出"RL2R'F2LD'"之类的字符串,将其分成字符串"R" "L2" "R'" "F2" "L" "D'"的最有效方法是什么? 我尝试了一些方法,比如首先将它们分成单个字符,然后尝试将它们添加到列表中,没有任何方法正常工作。

4 个答案:

答案 0 :(得分:5)

def rubikstring(s):
    import string
    cumu = ''
    for c in s:
        if c in string.ascii_letters:
            if cumu: yield cumu
            cumu = ''
        cumu += c
    if cumu: yield cumu

可以完成你的工作。与

>>> for i in rubikstring("RL2R'F2LD'"): i
...
'R'
'L2'
"R'"
'F2'
'L'
"D'"

您可以通过

获得所需的结果
>>> list(rubikstring("RL2R'F2LD'"))
['R', 'L2', "R'", 'F2', 'L', "D'"]

答案 1 :(得分:4)

您可以使用正则表达式:

import re
cubedirs = re.compile(r"[RLFBUDrlfbudxyz][2']?")
cubedirs.findall("RL2R'F2LD'")

这会输出['R', 'L2', "R'", 'F2', 'L', "D'"]

正则表达式实际上非常简单。 [..]字符组表示:匹配给定集合中的一个字符(因此RLF等)。

然后我们寻找第二个字符组可选匹配1个字符,即2'。第二个字符后面的问号是使它成为可选的;我们指定如果'2字符不存在,那也没关系。

.findall()方法只返回已找到的所有匹配项,因此您将获得输入字符串中与该模式匹配的所有字符组的列表。

答案 2 :(得分:3)

您可以使用正则表达式:

[FBUDLRfbudlrxyz][2']?

Here's a live demo.

import re

s = "RL2R'F2LD'"

for m in re.finditer("[FBUDLRfbudlrxyz][2']?", s):
    print m.group(0)

(很抱歉没有解释如何在评论中这样做,我真的不懂Python。)

答案 3 :(得分:1)

如评论所述,正则表达式将是一个好方法:

>>> import re
>>> re.findall('[A-Z]{1}[0-9]{0,1}', "RL2R'F2LD'")
['R', 'L2', 'R', 'F2', 'L', 'D']