# Project: Phone Number and Email Address Extractor

# Get the text off the clipboard.
# Find all phone numbers and email addresses in the text.
# Paste them onto the clipboard.

import pyperclip, re

phoneRegex = re.compile(r'''(
    (\d{3}|\(\d{3}\))?                  # area code
    (\s|-|\.)?                          # separator
    (\d{3})                             # first 3 digits
    (\s|-|\.)                           # separator
    (\d{4})                             # last 4 digits
    (\s*(ext|x|ext.)\s*(\d{2,5}))?      # extension
    )''', re.VERBOSE)

emailRegex = re.compile(r'''(
    [a-zA-Z0-9._%+-]+       # username
    @
    [a-zA-Z0-9.-]+          # domain name
    (\.[a-zA-Z]{2,4})       # dot-something
    )''', re.VERBOSE)

# Find matches in clipboard text.
text = str(pyperclip.paste())

matches = []
for groups in phoneRegex.findall(text):
    phoneNum = '-'.join([groups[1], groups[3], groups[5]])
    if groups[8] != '':
        phoneNum += ' x' + groups[8]
    matches.append(phoneNum)
for groups in emailRegex.findall(text):
    matches.append(groups[0])

# Copy results to the clipboard.
if len(matches) > 0:
    pyperclip.copy('\n'.join(matches))
    print('Copied to clipboard:')
    print('\n'.join(matches))
else:
    print('No phone numbers or email addresses found.')

# more ideas:
# Find website URLs that begin with http:// or https://.
# Clean up dates in different date formats (such as 3/14/2015, 03-14-2015,
#   and 2015/3/14) by replacing them with dates in a single, standard format.
# Remove sensitive information such as Social Security or credit card numbers.
# Find common typos such as multiple spaces between words, acciden- tally accidentally
#   repeated words, or multiple exclamation marks at the end of sentences. Those are annoying!!
