在 python 中拆分字符串(如魔方符号)的最有效方法?



如果给定的 "RL2R'F2LD'"之类的字符串,将其拆分为字符串"R" "L2" "R'" "F2" "L" "D'"的最有效方法是什么?我尝试了几种类似的方法,例如首先将它们拆分为单独的炭,然后尝试将它们添加到列表中,而没有任何正确的方法。

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'"]

也。

您可以使用正则表达式:

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

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

正则表达式实际上非常简单。[..]字符组的意思是:匹配一个字符(因此RLF等)。

)。

然后,我们寻找第二个字符组 匹配1个字符,即 2'。第二个字符之后的问号是使其可选的。我们指定的是,如果'2字符不存在。

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

您可以使用正则表达式:

[FBUDLRfbudlrxyz][2']?

这是现场演示。

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

(对不起,我真的不知道如何在评论中解释如何做。)

正常表达式将是一个好方法:

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

相关内容

  • 没有找到相关文章

最新更新