1

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

4

4 回答 4

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

也是。

于 2012-11-07T15:37:21.180 回答
4

您可以使用正则表达式:

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

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

正则表达式其实很简单。字符组的[..]意思是:匹配给定集合中的一个R字符(例如 an ,或 an L,或 anF等)。

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

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

于 2012-11-07T15:37:28.503 回答
3

您可以使用正则表达式:

[FBUDLRfbudlrxyz][2']?

这是一个现场演示。

import re

s = "RL2R'F2LD'"

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

(很抱歉没有在评论中解释如何做到这一点,我真的不知道 Python。)

于 2012-11-07T15:38:59.430 回答
1

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

>>> import re
>>> re.findall('[A-Z]{1}[0-9]{0,1}', "RL2R'F2LD'")
['R', 'L2', 'R', 'F2', 'L', 'D']
于 2012-11-07T15:38:53.680 回答