Regex для сопоставления со списком полей: значения - PullRequest
1 голос
/ 22 июня 2019

Я пишу программу (для домашнего задания Python), которая ищет базу данных на основе запроса

запросы форматируются так (произвольные имена полей). Поле: Значение И они разделены запятыми для нескольких

EG

Имя: Джордж Буш, Адрес: 1234, b-street, Электронная почта: email@email.com

Мне нужно извлечь поле и значение

Я возился с разными регулярными выражениями, но я негодяй

Прямо сейчас мое «лучшее» регулярное выражение таково: ([\ w @ -] +): * ([\ w@ -] +)

, но это некорректно фиксирует значения с запятыми в нем и может пропустить произвольные символы

Вот еще несколько примеров моего желаемого поведения

Запрос:«Имя: Джордж Буш»

Соответствие: «имя», «Джордж Буш»


Запрос: «Адрес: 1234, улица улица»

Соответствие: 'Адрес ',' 1234, улица улица '


Запрос: "Имя: Джордж Буш, Адрес: 1234, улица улица, f13ldna-me: ---"

Match1: 'name', 'George Bush'

Match2: 'Address', '1234, street street'

Match3: 'f13ldna-me', '---'

1 Ответ

3 голосов
/ 22 июня 2019

Чтобы получить совпадения из данных вашего примера, вы можете использовать класс символов с отрицанием для сопоставления без символа пробела или : для сопоставления с полем, так как в примере данные не содержат пробелов,

В качестве части значения вы также можете использовать отрицательный класс символов, соответствующий не :, за которым следует сопоставление запятой и 0+ пробельных символов или утверждение конца строки.

([^\s:]+):\s*([^:]+)(?:,\s*|$)

Regex demo

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