python挑战3:打印奇怪的输出

时间:2017-06-13 15:51:05

标签: python

我是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 我做错了什么? 如果我对,我接下来应该做什么?

3 个答案:

答案 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 ,这可能会让人感到困惑