我想要你的意见,因为你可能比我更有经验。
我来自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而且还要清理代码。非常感谢你
答案 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