Validating Email Addresses With a Filter Hackerrank solution

Validating Email Addresses With a Filter Hackerrank Solution
Validating Email Addresses With a Filter

Validating Email Addresses With a Filter Hackerrank Solution

You are given an integer N followed by N email addresses. Your task is to print a list containing only valid email addresses in lexicographical order.

Valid email addresses must follow these rules:

  • It must have the username@websitename.extension format type.
  • The username can only contain letters, digits, dashes and underscores .

[a-z],[A_Z],[0-9],[_-]

  • The website name can only have letters and digits .

[a-z],[A_Z],[0-9]

  • The extension can only contain letters .[a-z],[A-Z]
  • The maximum length of the extension is 3.

Concept

filter takes a function returning True or False and applies it to a sequence, returning a list of only those members of the sequence where the function returned True. A Lambda function can be used with filters.

Let’s say you have to make a list of the squares of integers from  to  (both included).

>> l = list(range(10))
>> l = list(map(lambda x:x*x, l))

Now, you only require those elements that are greater than 10 but less than 80.

>> l = list(filter(lambda x: x > 10 and x < 80, l))

Easy, isn’t it?

Example

Complete the function fun in the editor below.

fun has the following paramters:

  • string s: the string to test

Returns

  • boolean: whether the string is a valid email or not

Input Format

The first line of input is the integer N, the number of email addresses.
N lines follow, each containing a string.

Constraints

Each line is a non-empty string.

Sample Input

3
lara@hackerrank.com
brian-23@hackerrank.com
britts_54@hackerrank.com

Sample Output

['brian-23@hackerrank.com', 'britts_54@hackerrank.com', 'lara@hackerrank.com']

Code:


import re
def fun(s):
    
    pt=re.compile("([a-zA-Z0-9_-]+)@([a-zA-Z0-9]+)\.([a-zA-z]{1,3})$")
    return pt.match(s)


def filter_mail(emails):
    return filter(fun, emails)

if __name__ == '__main__':
    n = int(raw_input())
    emails = []
    for _ in range(n):
        emails.append(raw_input())

    filtered_emails = filter_mail(emails)
    filtered_emails.sort()
    print filtered_emails

Disclaimer: This problem is originally created and published by HackerRank, we only provide solutions to this problem. Hence, doesn’t guarantee the truthfulness of the problem. This is only for information purposes.

Leave a Comment