Словарь и регулярные выражения сопоставляют объекты для построения URL - PullRequest
0 голосов
/ 23 февраля 2020

Попытка предварительно заполнить форму из данных 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"? Я уверен, что это взломано.

Мой другой вопрос, который я сейчас пытаюсь исчерпать. Является ли понимание списка правильным ответом для замены ни одного на ""? - и любая помощь со структурой и синтаксисом - это кажется , как я должен быть в состоянии свернуть его в словарное объявление?

1 Ответ

0 голосов
/ 24 февраля 2020

Конечно, на это уже отвечали:

возвращаемая строка с первым совпадением Regex

Похоже, что это просто вопрос внедрения '' по умолчанию в мой заявления, добавив "| $"

...