繁体   English   中英

最有效的分割字符串的方法,例如python中的rubik的多维数据集表示法?

[英]Most efficient way of splitting strings like rubik's cube notations in 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)

(很抱歉,我没有在注释中解释如何做,我并不真正了解Python。)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM