Убедитесь, что указанная строка соответствует шаблону на python - PullRequest
0 голосов
/ 03 февраля 2010

Не могли бы вы посоветовать, как проверить в python, соответствует ли предоставленная строка указанному шаблону и вернуть результат.

Например, приведенный ниже шаблон:

<[префикс] - [id]>, разделенных ','> | "

где префикс - любое количество буквенных символов, id это только цифры, но не более 5 цифр, лог это любое количество любых символов

Примеры:

  1. proj-123|log message
  2. proj-234, proj-345|log message

Полагаю, самый простой способ - применить регулярное выражение, которое я не использовал на python.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 03 февраля 2010
(?:[a-z]+-\d{1,5})(?:, [a-z]+-\d{1,5})*\|.*

не понятно, что вы хотите захватить, поэтому я использую группы без захвата. Если вам нужно только логическое значение:

>>> regex = '[a-z]+-\d{1,5}(?:, [a-z]+-\d{1,5})*\|.*'
>>> re.match(regex, 'proj-234, proj-345|log message') is not None
True

Конечно, тот же результат может быть достигнут с помощью последовательности простых строковых методов:

prefs, _, log = subj.partition('|')
for group in prefs.split(', '):
    pref, _, id5 = group.partition('-')
    if id5.isdigit() and len(id5) <= 5 and pref.isalpha():
         print(pref, id5)
0 голосов
/ 03 февраля 2010

Расширение превосходного регулярного выражения SilentGhosts ...

Следующее будет соответствовать более чем двум тегам, разделенным запятыми, и захватывает теги в одной группе и сообщение журнала в другой группе:

import re

line = 'proj-234,proj-345,proj-543|log message'
match = re.match('((?:[a-zA-Z]+-\d{1,5})(?:,[a-zA-Z]+-\d{1,5})+)\|(.*)', line)
tags = match.group(1).split(',')
log_msg = match.group(2)

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

0 голосов
/ 03 февраля 2010

Python имеет отличную библиотеку регулярных выражений в stdlib. Вот документация . Просто используйте re.match, и это все, что вам нужно.

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