【发布时间】:2019-02-13 07:58:43
【问题描述】:
我正在尝试对 CSV 文件中存在的电子邮件 ID 进行基本检查。我不知道为什么它没有通过“if”检查。
import csv
import re
input_file = open("test_list.csv", "r").readlines()
print(len(input_file))
csv_reader = csv.reader(input_file)
line_count = 0
try:
for row in csv_reader:
line_count += 1
print('Checking ' + str(line_count) + ' of ' + str(len(input_file)))
name = {row[0]}
email = list({row[2]})
print(str(email[0]))
print('Checking contact name'+str(name))
regex = '^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$'
match = re.match(regex,str(email[0]))
if match == None :
print("Bad Email")
else:
print("Good Email")
print('')
print('')
except IndexError as error:
print('Checked all the data')
我的 csv 文件是这样的:
bhanu1, singh2, bha.nu@gmail.com
bhanu2, singh2, bhadoxit.com
bhanu3, singh2, bhan@esnotexit.com
我的输出是:
3
Checking 1 of 3
bha.nu@gmail.com
Checking contact nameset(['bhanu1'])
Bad Email
Checking 2 of 3
bhadoxit.com
Checking contact nameset(['bhanu2'])
Bad Email
Checking 3 of 3
bhan@esnotexit.com
Checking contact nameset(['bhanu3'])
Bad Email
【问题讨论】:
-
你的缩进是错误的。你应该缩进for循环的代码,否则循环是空的
-
如果破折号“-”可以是电子邮件的一部分,它应该在方括号中转义。像这样:[a-z0-9\-]
-
@Gnudiff 不,破折号可以放在字符类的最后而不转义。
-
问题是您在每封电子邮件之前都有一个空格,您可以在输出中看到它。所以你应该在你的匹配中添加一个
strip():re.match(regex,str(email[0]).strip())它应该可以工作