因此,我试图在30天的代码黑客挑战中解决一些代码问题。如果输入的邮件是gmail.com,我必须返回输入的名字。例如,输入可能是:
(数字指定程序的输入行数。)
6
riya riya@gmail.com
julia julia@julia.me
julia sjulia@gmail.com
julia julia@gmail.com
samantha samantha@gmail.com
tanya tanya@gmail.com
输出结果将如下所示
riya
julia
julia
samantha
tanya
我编写了以下代码来尝试处理此问题:
import math
import os
import random
import re
import sys
if __name__ == '__main__':
N = int(input().strip())
pattern = re.compile(r'([a-zA-Z]@gmail\.com)')
for N_itr in range(N):
first_multiple_input = input().rstrip().split()
firstName = first_multiple_input[0]
emailID = first_multiple_input[1]
matches = pattern.finditer(emailID)
if matches.group(0):
print(firstName)
但当我运行代码时,会收到一条错误消息:
Traceback (most recent call last):
File "Solution.py", line 25, in <module>
if matches.group(0):
AttributeError: 'callable_iterator' object has no attribute 'group'
我在Stack Overflow上看到了类似的问题,但我无法理解答案,这是我第一次使用regex,我正在网上观看视频(因为我是自学的)。我怎样才能解决这个问题
这里不需要正则表达式(或
math
,或random
,或os
)这并不完全等同于您的代码,因为我们不检查
@
字符前面的内容。如果你想这样做,你应该真正检查Gmail允许什么(例如,我认为他们会允许那里有数字,可能还有一个点,可能还有一些其他字符,如下划线等)如果您真的想使用正则表达式,可能不要使用
finditer
,因为它会返回match
对象的列表。如果您只关心第一个匹配,只需使用re.search()
;然后,如果存在匹配项,结果将是一个match
对象,您可以调用它的.group()
方法这也不完全等同于您的代码,因为如果输入行少于第一行承诺的输入行,那么它不会失败。添加一个检查应该很容易,而且可能是一个很好的练习
如果您的文件不包含函数,
if __name__ == '__main__':
检查是没有意义的。它的目的是允许另一个Python模块import
这个模块,但是如果它不包含任何可以有效地import
编辑的内容,那么无论如何,您都不会希望这样做。(更详细地说,当您import
这个文件时,__name__
将不会被__main__
,因此所有这些代码都将被丢弃。您希望在其中放入尽可能少的代码,如果您关心代码的可重用性,请将所有有用的代码放入类和函数中。)相关问题 更多 >
编程相关推荐