WedX - журнал о программировании и компьютерных науках

Объекты соответствия словаря и регулярного выражения для построения URL-адреса

Пытаюсь предварительно заполнить форму из данных 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. Моя проблема в том, что похоже, что операторы ИЛИ, добавленные к regex.searches, игнорируются. В исходных файлах будет регулярно отсутствовать информация, поэтому по умолчанию я заполняю ее "" или "---" там, где совпадений нет, - это то, что я хочу сделать. В настоящее время я изучаю понимание списка, чтобы сделать это.

По сути, мой вопрос в том, делаю ли я это «правильно»? Я уверен, что это хаки.

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


  • Пожалуйста, объясните свой вопрос как можно яснее. Это также помогает задавать конкретные вопросы. 23.02.2020
  • Почему ты убегаешь | ? Ваши выражения регулярных выражений кажутся мне странными. Я не уверен, что они делают именно то, что вы от них хотите. 23.02.2020
  • Например, случайный выбор (?=\|) говорит о том, что вы хотите, чтобы текст, предшествующий этому, совпадал, если за ним следует это... и то, что это будет соответствовать, является '|' символ. 23.02.2020
  • Извините, я не был ясен - я думаю, что операторы ИЛИ игнорируются, так как, когда совпадений нет, он выдает ошибку исключения. «Список», объект не имеет атрибута «группа» - я хотел бы иметь возможность просто назначать или . 23.02.2020
  • я убегаю | потому что я заменил \n на | до того, как я узнал об использовании флага DOTALL, так что теперь это своего рода разделитель. Здесь происходит огромная кривая обучения. 23.02.2020
  • Еще один момент, на который следует обратить внимание: текстовый экстракт Py2PDF выполняет свою работу, но текст не в порядке (по крайней мере, постоянно) — это означает, что исходные данные всегда находятся в одном и том же странном порядке при преобразовании, что может объяснить, почему я m ограничивающие (?) параметры соответствия, которые не имеют особого смысла в контексте, то есть между Last Name: и информацией о сотруднике: 23.02.2020

Ответы:


1

Конечно, на это уже был дан ответ:

возврат строки с первым соответствием регулярному выражению

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

24.02.2020
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]