Python:获取两个首都之间的字符串

时间:2013-12-10 12:30:43

标签: c++ python string

我想要你的意见,因为你可能比我更有经验。

我来自C ++并且我还不习惯以Pythonic的方式做事。 我想在2个大写字母之间循环一个字符串。例如,我可以这样做:

 i = 0
 str = "PythonIsFun"
 for i, z in enumerate(str):
     if(z.isupper()):
         small = ''
         x = i + 1
         while(not str[x].isupper()):
             small += str[x]

我在手机上写了这个,所以我不知道这是否有效,但是我认为你抓住了这个主意。 我需要你帮助我获得最好的结果,不仅仅是以非强制方式进入cpu而且还要清理代码。非常感谢你

4 个答案:

答案 0 :(得分:4)

这是正则表达式最好的选择之一。

(顺便说一下,不要调用字符串str:它会影响内置函数。)

s = 'PythonIsFun'
result = re.search('[A-Z]([a-z]+)[A-Z]', s)
if result is not None:
    print result.groups()[0]

答案 1 :(得分:2)

你可以使用正则表达式:

import re
re.findall ( r'[A-Z]([^A-Z]+)[A-Z]', txt )

输出['ython']

re.findall ( r'(?=[A-Z]([^A-Z]+)[A-Z])', txt )

输出['ython', 's'];如果你只是需要第一场比赛,

re.search ( r'[A-Z]([^A-Z]+)[A-Z]', txt ).group( 1 )

答案 2 :(得分:0)

您可以使用列表推导来轻松完成此操作。

>>> s = "PythonIsFun"
>>> u = [i for i,x in enumerate(s) if x.isupper()]
>>> s[u[0]+1:u[1]]
'ython'

如果你不能保证有两个大写字符,你可以检查u的长度,以确保它至少为2.这会迭代整个字符串,这可能是一个问题,如果两个大写字符出现在一个冗长的字符串的开头。

答案 3 :(得分:0)

有很多方法可以解决这个问题,但我会使用正则表达式。

此示例将采用“PythonIsFun”并返回“ythonsun”

import re

text = "PythonIsFun"

pattern = re.compile(r'[a-z]')      #look for all lower-case characters

matches = re.findall(pattern, text) #returns a list of lower-chase characters

lower_string = ''.join(matches)     #turns the list into a string

print lower_string

输出:

ythonsun