Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

regex no clipboard

Olá criei um programinha para extrair dados (telefone e e-mail) do clipboard, esse programinha:

#! python3
# phoneAndEmail.py

#Cria regex para telefone.
import pyperclip, re

phoneRegex = re.compile(r"""(
    (\d{3}|\(\d{3}\))?
    (\s|-|\.)?
    (\d{3})
    (\s|-|\.)
    (\d{4})
    (\s*(ext|x|ext.)\s*(\d{2,5}))? 
    )""",re.VERBOSE)

#Cria regex para email.
emailRegex = re.compile(r"""(
    {a-zA-Z0-9._%+-]+    #nome do úsuario
    @                #simbolo de @
    [a-zA-Z0-9]+       #nome do dominio
    \.[a-zA-Z\.a-zA-Z]    #ponto seguido de outros caracteres
    )""",re.VERBOSE)

#Encontra as correspondência no texto do clipboard
text = str(pyperclip.paste())

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

#Copia os resultados para o clipboard
if len(matches) > 0:
    pyperclip.copy('\n'.join(matches))
    print('Copied to clipboard:')
    print('\n'.join(matches))
else:
    print('Sem número de telefone ou e-mail encontrado.')

Copiei o seguinte trecho para validar o código

Contact Us

No Starch Press, Inc.
245 8th Street
San Francisco, CA 94103 USA
Phone: 800.420.7240 or +1 415.863.9900 (9 a.m. to 5 p.m., M-F, PST)
Fax: +1 415.863.9950

Reach Us by Email

    General inquiries: info@nostarch.com
    Media requests: media@nostarch.com
    Academic requests: academic@nostarch.com (Further information)
    Help with your order: info@nostarch.com

Na saída ele me aponta o número de telefone corretamente, mas não o e-mail. A saída é:

Copied to clipboard:
800-420-7240
415-863-9900
415-863-9950

Já tentei mudar a parte do "#ponto seguido de outros caracteres" mas não surgiu efeito, podem me ajudar a achar o erro?

1 resposta
solução!

Se alguém estiver com dificuldade em um case parecido consegui resolver da seguinte forma:

#! python3
# phoneAndEmail.py

#Cria regex para telefone.
import pyperclip, re

phoneRegex = re.compile(r"""(
    (\d{3}|\(\d{3}\))?
    (\s|-|\.)?
    (\d{3})
    (\s|-|\.)
    (\d{4})
    (\s*(ext|x|ext.)\s*(\d{2,5}))? 
    )""",re.VERBOSE)

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

#Encontra as correspondência no texto do clipboard
text = str(pyperclip.paste())

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

#Copia os resultados para o clipboard
if len(matches) > 0:
    pyperclip.copy('\n'.join(matches))
    print('Copied to clipboard:')
    print('\n'.join(matches))
    s = pyperclip.paste()
    with open('phone&emailfinder.txt', 'w') as g:
        g.write(s)
    g.close()
else:
    print('Sem número de telefone ou e-mail encontrado.')

Fiz um extra para salvar os dados em um arquivo .txt

agora copiando o seguinte texto:

Contact Us

No Starch Press, Inc.
245 8th Street
San Francisco, CA 94103 USA
Phone: 800.420.7240 or +1 415.863.9900 (9 a.m. to 5 p.m., M-F, PST)
Fax: +1 415.863.9950

Reach Us by Email

    General inquiries: info@nostarch.com
    Media requests: media@nostarch.com
    Academic requests: academic@nostarch.com (Further information)
    Help with your order: info@nostarch.com

Temos a saída

Copied to clipboard:
800-420-7240
415-863-9900
415-863-9950
info@nostarch.com
media@nostarch.com
academic@nostarch.com
info@nostarch.com

E um arquivo chamado "phone&emailfinder" com os dados

800-420-7240
415-863-9900
415-863-9950
info@nostarch.com
media@nostarch.com
academic@nostarch.com
info@nostarch.com