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