我是python的初学者,我玩python挑战但坚持问题#3 我的代码工作正常,但输出很奇怪 problem 视图源中的字符串
x = 0
small = ''
while (x<len(s)) :
#take string with length 7 one at a time e.g : 'AKLoKPL'
y = s[x : x+7]
op = ord(y[0])-65
if (0<=op<=25) : #check if the first char is capital
if (0 <= ord(y[1]) - 65 <= 25 and 0<= ord(y[2]) - 65 <=25 ) :
if(0 <= ord(y[4])- 65 <=25 ) : #check other side
if (0 <= ord(y[5]) - 65 <= 25 and 0<= ord(y[6]) - 65 <=25 ) :
if (0<= ord(y[3])-97 <= 25) :
small += y[3] # add small char (o to small )
x +=7
print(small)
我得到了这个输出:egtdjbjfjhcxjkpntpdufhqfwxhqhqskeffmdiudiujmkinphjzujpbfhmxvvgoudtqfuspuzcashuszom
我做错了什么?
如果我对,我接下来应该做什么?
答案 0 :(得分:1)
使用这样的正则表达式并删除所有这些循环&#39; [A-Z] {3} [a-z] [A-Z] {3}&#39;
import re
pattern = re.compile('[A-Z]{3}[a-z][A-Z]{3}')
print(re.match(pattern, <your_string>).group())
答案 1 :(得分:1)
您需要使用以下模式来匹配由3个大写字母包围的小写字母:
(?<![A-Z])[A-Z]{3}([a-z])[A-Z]{3}(?![A-Z])'
(使用negative look-around assertions来避免超过3个大写字母的匹配)
>>> pattern = r'(?<![A-Z])[A-Z]{3}([a-z])[A-Z]{3}(?![A-Z])'
>>> re.findall(pattern, 'ABCDeFGHI') # surrounded by 4 uppercase letters
[]
>>> re.findall(pattern, 'ABCDeFGHi') # surrounded by 4/3 uppercase letters
[]
>>> re.findall(pattern, 'aBCDeFGHi')
['e']
letters = re.findall(r'(?<![A-Z])[A-Z]{3}([a-z])[A-Z]{3}(?![A-Z])', given_string)
answer = ''.join(letters)
答案 2 :(得分:0)
for
这是一个非正则表达式解决方案。 string
常量使我们免于弄乱import string
def three_upper(s):
return len(s) == 3 and all(x in string.ascii_uppercase for x in s)
def check(s):
for i in range(3, len(s)-3):
if three_upper(s[i-3:i]) and s[i] in string.ascii_lowercase and three_upper(s[i+1:i+4]):
return True
return False
,这可能会让人感到困惑