URL Валидация. Regex. Не работает корректно регулярное выражение
Пытаюсь решить задачу с Валидацией URL. ( https://acmp.ru/index.asp?main=task&id_task=870&ins=1 ) И так и этак крутил и подбирал регулярное выражение, но сайт при проверке кода , выдает что не проходит тесты. Пишу на Python. Подскажите куда двигаться...
#----------------------------------------------------------
import re
def validate_url(data):
pattern = re.compile(r'^'
# [http://]
r'(http://)?'
# host
r'('
# prefix.doman
r'([\da-z_.]+\.[a-z]{2,3})'
r'|'
# IP
r'('
r'(((2[0-4]\d)|(25[0-5])|(1\d{2})|([1-9]\d)|(\d))\.){3}'
r'((2[0-4]\d)|(25[0-5])|(1\d{2})|([1-9]\d)|(\d))'
r')'
r'|'
# computer name
r'([\da-z_]+)'
r')'
# [:port]
r'(:((6[0-4]\d{3})|(65[0-4]\d{2})|(655[0-2]\d)|(6553[0-5])|([1-5]\d{4})|([1-9]\d{1,3})|(\d)))?'
# [/path]
r'((/[\da-z_]+)+)?'
# [/file]
r'((/([\da-z_.])*)+)?'
r'$', re.IGNORECASE)
if re.fullmatch(pattern, data):
return True
else:
return False
def count_rows():
file_txt = open('INPUT.txt', 'r')
count = 0
for _line in file_txt:
rows = re.findall(r'\n', _line)
if len(rows) > 0:
count += 1
else:
count += 1
file_txt.close()
if count < 10000:
return True
else:
return False
def check_txt(data):
if len(data) > 1000:
return False
else:
return True
def get_urls():
file = open('INPUT.txt', 'r')
output = open('OUTPUT.txt', 'w')
if count_rows():
for line in file:
data = line.rstrip('\n')
if validate_url(data) and check_txt(data):
output.write('YES' + '\n')
else:
output.write('NO' + '\n')
file.close()
output.close()
return True
else:
file.close()
output.close()
return False
get_urls()
#----------------------------------------------------------