将字符串拆分为元组(上,下)'ABCDefgh'。 Python 2.7.6

时间:2014-01-09 23:17:36

标签: python split uppercase lowercase

my_string = 'ABCDefgh'
desired = ('ABCD','efgh')

我能想到这样做的唯一方法是创建一个for循环,然后单独扫描并检查字符串中的每个元素,然后添加到字符串然后创建元组。 。 。有没有更有效的方法来做到这一点?

它将始终采用UPPERlower格式

5 个答案:

答案 0 :(得分:1)

简单方法(两遍):

>>> import itertools
>>> my_string = 'ABCDefgh'
>>> desired = (''.join(itertools.takewhile(lambda c:c.isupper(), my_string)), ''.join(itertools.dropwhile(lambda c:c.isupper(), my_string)))
>>> desired
('ABCD', 'efgh')

高效的方式(一次通过):

>>> my_string = 'ABCDefgh'
>>> uppers = []
>>> done = False
>>> i = 0
>>> while not done:
...     c = my_string[i]
...     if c.isupper():
...         uppers.append(c)
...         i += 1
...     else:
...         done = True
... 
>>> lowers = my_string[i:]
>>> desired = (''.join(uppers), lowers)
>>> desired
('ABCD', 'efgh')

答案 1 :(得分:1)

print re.split("([A-Z]+)",my_string)[1:]

答案 2 :(得分:1)

因为我向所有事情投掷itertools.groupby

>>> my_string = 'ABCDefgh'
>>> from itertools import groupby
>>> [''.join(g) for k,g in groupby(my_string, str.isupper)]
['ABCD', 'efgh']

(这里有点制服,但很好地扩展到更复杂的问题。)

答案 3 :(得分:0)

my_string='ABCDefg'
import re
desired = (re.search('[A-Z]+',my_string).group(0),re.search('[a-z]+',my_string).group(0))
print desired

答案 4 :(得分:0)

不使用re

的更强大的方法
import string

>>> txt = "ABCeUiioualfjNLkdD"
>>> tup = (''.join([char for char in txt if char in string.ascii_uppercase]),
  ''.join([char for char in txt if char not in string.ascii_uppercase]))

>>> tup
('ABCUNLD', 'eiioualfjkd')

char not in string.ascii_uppercase代替char in string.ascii_lowercase意味着如果您的字符串中包含非字母,您将永远不会丢失任何数据,如果您在此输入开始时突然开始出现错误,这可能很有用被拒绝20个函数调用。