Решение на Регулярни изрази от Йордан Данчев

Обратно към всички решения

Към профила на Йордан Данчев

Резултати

  • 3 точки от тестове
  • 0 бонус точки
  • 3 точки общо
  • 13 успешни тест(а)
  • 26 неуспешни тест(а)

Код

import re
class PrivacyFilter:
preserve_phone_country_code = False
preserve_email_hostname = False
partially_preserve_email_username = False
def __init__(self, text):
self.text = text
def filtered(self):
replace_phone = "[PHONE]"
replace_email = "[EMAIL]"
pattern_phone = r'\+?\d+'
pattern_email = r'[\w*]+@\S*'
if self.preserve_phone_country_code is True:
pattern_phone = r'(?<=\+359)\d*'
if len(re.findall(pattern_phone, self.text)) == 0:
pattern_phone = r'\+?\d+'
else:
replace_phone = " [FILTERED]"
if self.preserve_email_hostname is True:
pattern_email = r'[\w*]+(?=@)'
replace_email = "[FILTERED]"
if self.partially_preserve_email_username is True:
pattern_email = r'[\w*]+(?=@)'
if len(re.match(pattern_email, self.text).group()) >= 6:
pattern_email = r'(?<=\w{3})[\w*]+(?=@)'
replace_email = "[FILTERED]"
else:
pattern_email = r'[\w*]+(?=@)'
replace_email = "[FILTERED]"
self.text = re.sub(pattern_email, replace_email, self.text)
self.text = re.sub(pattern_phone, replace_phone, self.text)
return self.text
class Validations:
def is_email(value):
is_email = False
pattern = r'[\S*]{1,200}\@([\w-]*)\.([\w-]*)'
if re.match(pattern, value, flags=0) is not None:
is_email = True
return is_email
def is_phone(value):
is_phone = False
local_pattern = r'0[1-9](\d\-?\s?){5,11}'
international_pattern = r'\+359\s?\-?(\d\s?\-?){6,11}'
international_zero_pattern = r'00\s?\-?(\d\s?\-?){6,11}'
if re.match(local_pattern, value, flags=0) is not None or re.match(international_pattern, value, flags=0) is not None or re.match(international_zero_pattern, value, flags=0) is not None:
is_phone = True
return is_phone
def is_hostname(value):
is_hostname = False
pattern = r'([\w-]*)\.([\w-]*)'
if re.match(pattern, value, flags=0) is not None:
is_hostname = True
return is_hostname
def is_ip_address(value):
is_ip_address = False
pattern = r'(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'
if re.match(pattern, value, flags=0) is not None:
is_ip_address = True
return is_ip_address
def is_number(value):
is_number = False
pattern_zero = r'\-?0[0-9]*\.?[0-9]*'
pattern_no_zero = r'\-?[1-9]+\.?[0-9]*'
if re.match(pattern_zero, value, flags=0) is not None or re.match(pattern_no_zero, value, flags=0) is not None:
is_number = True
return is_number
def is_integer(value):
is_integer = False
pattern = r'\-?[1-9][0-9]*'
if re.match(pattern, value, flags=0):
is_integer = True
return is_integer
def is_date(value):
is_date = False
pattern = r'[0-9]{4}-(1[0-2]|0[0-9])-(0[0-9]|[1-3][0-9])'
if re.match(pattern, value, flags=0):
is_date = True
return is_date
def is_time(value):
is_time = False
pattern = r'(0[0-9]|1[0-9]|2[0-3]):(0[0-9]|[1-5][0-9]):\2'
if re.match(pattern, value, flags=0):
is_time = True
return is_time
def is_datetime(value):
is_datetime = False
pattern = r'[0-9]{4}-(1[0-2]|0[0-9])-(0[0-9]|[1-3][0-9])\s(0[0-9]|1[0-9]|2[0-3]):(0[0-9]|[1-5][0-9]):(0[0-9]|[1-5][0-9])'
if re.match(pattern, value, flags=0):
is_datetime = True
return is_datetime

Лог от изпълнението

▸ Покажи лога

История (1 версия и 0 коментара)

Йордан обнови решението на 23.04.2014 16:10 (преди около 11 години)

▸ Покажи разликите
+import re
+class PrivacyFilter:
+ preserve_phone_country_code = False
+ preserve_email_hostname = False
+ partially_preserve_email_username = False
+ def __init__(self, text):
+ self.text = text
+ def filtered(self):
+ replace_phone = "[PHONE]"
+ replace_email = "[EMAIL]"
+ pattern_phone = r'\+?\d+'
+ pattern_email = r'[\w*]+@\S*'
+ if self.preserve_phone_country_code is True:
+ pattern_phone = r'(?<=\+359)\d*'
+ if len(re.findall(pattern_phone, self.text)) == 0:
+ pattern_phone = r'\+?\d+'
+ else:
+ replace_phone = " [FILTERED]"
+ if self.preserve_email_hostname is True:
+ pattern_email = r'[\w*]+(?=@)'
+ replace_email = "[FILTERED]"
+ if self.partially_preserve_email_username is True:
+ pattern_email = r'[\w*]+(?=@)'
+ if len(re.match(pattern_email, self.text).group()) >= 6:
+ pattern_email = r'(?<=\w{3})[\w*]+(?=@)'
+ replace_email = "[FILTERED]"
+ else:
+ pattern_email = r'[\w*]+(?=@)'
+ replace_email = "[FILTERED]"
+ self.text = re.sub(pattern_email, replace_email, self.text)
+ self.text = re.sub(pattern_phone, replace_phone, self.text)
+ return self.text
+class Validations:
+ def is_email(value):
+ is_email = False
+ pattern = r'[\S*]{1,200}\@([\w-]*)\.([\w-]*)'
+ if re.match(pattern, value, flags=0) is not None:
+ is_email = True
+ return is_email
+ def is_phone(value):
+ is_phone = False
+ local_pattern = r'0[1-9](\d\-?\s?){5,11}'
+ international_pattern = r'\+359\s?\-?(\d\s?\-?){6,11}'
+ international_zero_pattern = r'00\s?\-?(\d\s?\-?){6,11}'
+ if re.match(local_pattern, value, flags=0) is not None or re.match(international_pattern, value, flags=0) is not None or re.match(international_zero_pattern, value, flags=0) is not None:
+ is_phone = True
+ return is_phone
+ def is_hostname(value):
+ is_hostname = False
+ pattern = r'([\w-]*)\.([\w-]*)'
+ if re.match(pattern, value, flags=0) is not None:
+ is_hostname = True
+ return is_hostname
+ def is_ip_address(value):
+ is_ip_address = False
+ pattern = r'(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'
+ if re.match(pattern, value, flags=0) is not None:
+ is_ip_address = True
+ return is_ip_address
+ def is_number(value):
+ is_number = False
+ pattern_zero = r'\-?0[0-9]*\.?[0-9]*'
+ pattern_no_zero = r'\-?[1-9]+\.?[0-9]*'
+ if re.match(pattern_zero, value, flags=0) is not None or re.match(pattern_no_zero, value, flags=0) is not None:
+ is_number = True
+ return is_number
+ def is_integer(value):
+ is_integer = False
+ pattern = r'\-?[1-9][0-9]*'
+ if re.match(pattern, value, flags=0):
+ is_integer = True
+ return is_integer
+ def is_date(value):
+ is_date = False
+ pattern = r'[0-9]{4}-(1[0-2]|0[0-9])-(0[0-9]|[1-3][0-9])'
+ if re.match(pattern, value, flags=0):
+ is_date = True
+ return is_date
+ def is_time(value):
+ is_time = False
+ pattern = r'(0[0-9]|1[0-9]|2[0-3]):(0[0-9]|[1-5][0-9]):\2'
+ if re.match(pattern, value, flags=0):
+ is_time = True
+ return is_time
+ def is_datetime(value):
+ is_datetime = False
+ pattern = r'[0-9]{4}-(1[0-2]|0[0-9])-(0[0-9]|[1-3][0-9])\s(0[0-9]|1[0-9]|2[0-3]):(0[0-9]|[1-5][0-9]):(0[0-9]|[1-5][0-9])'
+ if re.match(pattern, value, flags=0):
+ is_datetime = True
+ return is_datetime