Попытка предварительно заполнить форму из данных PDF здесь, и есть некоторая часть объектов и словарей соответствия регулярному выражению, на которых я застрял.
"сокращенный" код:
import PyPDF2, regex, urllib.parse, webbrowser
#using regex instead of re as I was nesting lookarounds, but might not need to do this anymore.
### Define the field ids with sensible names
entering_email = 'field45865550'
uid_number = 'field45865570'
fname = 'field45865574-first'
lname = 'field45865574-last'
add_1 = 'field45865578-address'
city = 'field45865578-city'
state = 'field45865578-state'
zip = 'field45865578-zip'
пропуская часть Py2PDF, так как это выглядит нормально. пожалуйста, прости мои соглашения об именах.
### Open text file, search for field contents, and define them
with open (pdffile+'-text.txt', 'r') as text_file:
text = text_file.read()
entering_email_value = regex.search(r'(?<=Email:\|)(.*?)(?=\|)(?=.*\|Manager Information:)', text) or ["---"]
uid_number_value = regex.search(r'(?<=UID Number:\|)(.*?)(?=\|)', text) or ["---"]
fname_value = regex.search(r'(?<=First Name:\|)(.*?)(?=\|)', text) or ["---"]
lname_value = regex.search(r'(?<=Last Name:\|)(.*?)(?=\|)', text) or ["---"]
add_1_value = regex.search(r'(?<=Last Name:\|.*)(?<=Address:\|)(.*?)(?=\|)(?=.*Employee Information:)', text) or ["---"]
city_value = regex.search(r'(?<=Last Name:\|.*)(?<=City & State:\|)(.*?)(?=,)(?=.*Employee Information:)', text) or ["---"]
state_value = regex.search(r'(?<=Last Name:\|.*)(?<=, )(.*?)(?= )(?=.*Employee Information:)', text) or ["---"]
zip_value = regex.search(r'(?<=Last Name:\|.*)(?<=[A-Z][A-Z] )(.*?)(?=\|)(?=.*Employee Information:)', text) or ["---"]
getVars = {entering_email: entering_email_value.group(),
uid_number: uid_number_value.group(),
email: email_value.group(),
fname: iw_fname_value.group(),
lname: iw_lname_value.group(),
city: city_value.group(),
state: state_value.group(),
zip: zip_value.group()
}
webbrowser.open(url + urllib.parse.urlencode(getVars), new=0, autoraise=True)
Синтаксис регулярного выражения может выглядеть странно, но работает нормально - я заменяю "\ n" на "|" потому что я не знал о флаге DOTALL. Моя проблема в том, что, похоже, операторы OR, добавленные в regex.searches, игнорируются. В исходных файлах будет регулярно отсутствовать информация, поэтому по умолчанию я заполняю ее "" или "---", где нет совпадения, и это то, что я хочу сделать. Я в настоящее время изучаю список понимания, чтобы сделать это.
По сути, мой вопрос, я делаю это "правильно-я sh"? Я уверен, что это взломано.
Мой другой вопрос, который я сейчас пытаюсь исчерпать. Является ли понимание списка правильным ответом для замены ни одного на ""? - и любая помощь со структурой и синтаксисом - это кажется , как я должен быть в состоянии свернуть его в словарное объявление?