Получить строку, соответствующую шаблону

У меня есть такой текст -

EventTimestamp        H 9EventType 8document 2ID  2b837c02-40c9-4d33-b81b-d489a06fa302-DCUP  LogToAuditTrail  SourceAppCD 5DOCSV  SourceAppUID  2b837c02-40c9-4d33-b81b-d489a06fa302 6UserID  5a8ce656-1a31-456b-b3dd-5ec0859c9f3e1

Я хочу получить идентификатор документа, который присутствует в приведенной выше строке как

2b837c02-40c9-4d33-b81b-d489a06fa302

Идентификатор имеет определенный шаблон -

<8characters(alpha numeric)> - <4characters(alpha numeric)> - <4characters(alpha numeric)> - <4characters(alpha numeric)> - <12characters(alpha numeric)>

В приведенной выше строке есть другие похожие идентификаторы, но мне интересно получить шаблон после подстроки document 2ID. Опять же, эта строка не является фиксированной, между document и ID может находиться какое-либо число, строка или пробел.

что ты уже испробовал?

Vorsprung 18.05.2018 13:28

Судя по всему, вы ищете UUID, чтобы символы не были буквенно-цифровыми, а были только подмножеством шестнадцатеричной строки ([0-9a-f]), поэтому правильным шаблоном будет: [0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}. Используйте флаг нечувствительности к регистру для нечувствительных к регистру UUID.

zwer 18.05.2018 13:43
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
2
47
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Использование re.search

Демо:

import re
s = "EventTimestamp        H 9EventType 8document 2ID  2b837c02-40c9-4d33-b81b-d489a06fa302-DCUP  LogToAuditTrail  SourceAppCD 5DOCSV  SourceAppUID  2b837c02-40c9-4d33-b81b-d489a06fa302 6UserID  5a8ce656-1a31-456b-b3dd-5ec0859c9f3e1"
m = re.search(r"document\s*\d+ID\s+([A-Za-z0-9\-]{36})", s)
if m:
    print(m.group())
    print(m.group(1))

Выход:

document 2ID  2b837c02-40c9-4d33-b81b-d489a06fa302
2b837c02-40c9-4d33-b81b-d489a06fa302

Это регулярное выражение должно соответствовать вашему запросу.

((?:[A-z]|\d){8}-(?:(?:[A-z]|\d){4}-){3}(?:[A-z]|\d){12}-(?:[A-z]|\d){4})

Вы также можете сделать это без регулярного выражения. Это всего лишь кодовый гольф.

source = "EventTimestamp        H 9EventType 8document 2ID  2b837c02-40c9-4d33-b81b-d489a06fa302-DCUP  LogToAuditTrail  SourceAppCD 5DOCSV  SourceAppUID  2b837c02-40c9-4d33-b81b-d489a06fa302 6UserID  5a8ce656-1a31-456b-b3dd-5ec0859c9f3e1"
document_loc = value.find('document')
value = value[document_loc:]
id_loc = value.find('ID')
value = value[id_loc:].split()[1]
print(value)

В общем, строка выглядит так, как будто она имеет предопределенную длину элементов, в этом случае вы должны иметь возможность просто взять определенный фрагмент или, если используются вкладки, просто разделить на символ табуляции, но это всего лишь предположение.

Другие вопросы по теме