Регулярное выражение - Проблема с определением необходимого класса символов (Python) - PullRequest
0 голосов
/ 20 июня 2020

Я пытаюсь написать регулярное выражение, которое выводит только имена из прикрепленного документа (только данные в таблице, я не использовал нижеприведенный материал, но со временем буду работать с этим). *

https://automatetheboringstuff.com/files/examplePhoneEmailDirectory.pdf

Вот код, который у меня есть до сих пор:

import re
import pyperclip

nameRegex = re.compile(r'''
 
[a-zA-Z]+    # first name
\s          # space
[a-zA-Z]+    # last name

''', re.VERBOSE)

text = pyperclip.paste()
extractedText = nameRegex.findall(text)

print(extractedText)

Проблема, с которой я сталкиваюсь, заключается в том, что когда я запускаю code Я получаю что-то вроде следующего: Jess ie Mckayjmckay

Он дает мне имя, фамилию и буквы в их адресе электронной почты, останавливаясь на первом номере. Я попытался решить эту проблему, добавив отрицательный класс пользовательских символов вроде этого [^ \ s]. Я думал, что код распознает пробел после фамилии и остановится. Однако это не работает, я подозреваю, что это как-то связано с форматированием документа.

Сможет ли кто-нибудь мне в этом помочь?

1 Ответ

0 голосов
/ 20 июня 2020

После вывода данных на печать я заметил, что ваше регулярное выражение также совпадает с адресами электронной почты и именами вместе, поскольку между ними есть пробел. Итак, моя идея состоит в том, чтобы убедиться, что первая буква каждого слова является заглавной (поскольку данные сформированы таким образом):


import re
import pyperclip

nameRegex = re.compile(r'''
 
[A-Z][a-z]+   # first name
\s+          # space
[A-Z][a-z]+    # last name

''', re.VERBOSE)

text = pyperclip.paste()

extractedText = nameRegex.findall(text)

print(extractedText)

Попробуйте это:)

Я получил результат ниже (часть результат):

['Jessie Mckay', 'Tom Jordan', 'Clayton Cross', 'Rayford Sutton', 'Jerome Gentry', 'Weldon Camacho', 'Quinton Franks', 'Adam Hubbard', 'Jarred Fox', 'Arnoldo Parker', 'Sid Mcdaniel', 'Raymon Combs', 'Ervin Francis', 'Gilberto Austin', 'Lino Barlow', 'Stacey Shepherd', 'Roscoe Terry', 'Eddie Meadows', 'Carlos Simpson', 'Jerome Manning', 'Hong Erickson', 'Burt Graham', 'Mario Sloan', 'Jeffry Mcintosh', 'Owen Malone', 'Jamar Gilbert', 'Guadalupe Ramsey', 'Chet Ramsey', 'Lester Finch', 'Mason Marquez', 'Olen Boyer', 'Sherman Gamble', 'Gerry Mccarthy', 'Jon Jefferson', 'Cristopher Maddox', 'Abel Talley', 'Jerrod Hurst', 'Ezra Pickett', 'Delbert Mcintyre', 'Tom Wilkins', 'Deandre Schneider', 'Louie Gross', 'Cary Mathews', 'Clinton Hernandez', 'Sylvester Goodman', 'Efren Daniels', 'Myles Knapp', 'Trey Hendrix', 'Gerardo Gonzales', 'Collin Wilkinson', 'Hubert Moore', 'Rudolph Joyce', 'Raymundo Griffin', 'Stanton Burris', 'Newton Huff', 'Lonnie Gibson', 'Newton Mendez', 'Dominic Kane', 'Rey Alvarado', 'Maxwell Pittman', 'Freddy Nolan', 'Quentin Kane', 'Marcelo Owens', 'Saul Warner', 'Giuseppe Edwards', 'Glen Duffy', 'Johnson Bird', 'Lon Mays', 'Orval Jones', 'Stefan Wiley', 'Dewayne Vincent', 'Elmo Morton', 'Trenton Randolph', 'Alonzo Noble', 'Stephan Callahan', 'Merrill Morin', 'Antonia Vasquez', 'Jerrod Horne', 'Sammie Blanchard', 'Renaldo Nielsen', 'Rick Logan', 'Xavier Sexton', 'Delmer Chambers', 'Melvin Dixon', 'Randell Wright', 'Kasey Mcbride', 'Long Cohen', 'Hunter Walton', 'Jacques Dean', 'Nicky Cleveland', 'Heath Reeves', 'Dannie Castro', 'Malcolm Pickett', 'Emil Bryant', 'Lonny Trevino',

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...