регулярное выражение формата имени файла - PullRequest
0 голосов
/ 16 марта 2019

Я пытаюсь создать регулярное выражение Python из следующей строки:
ABC--2000-01-10X13-11-44.237Z--572b3b7681572b3b7681572b3b7681572b3b7681

Это то, что мне удалось:
^ABC\S\S[0-9A-T\S.]{24}\S\S[a-z0-9]{40}$

Проблема в Pythonпродолжает жаловаться на отсутствие аномальной обратной косой черты или префикса r, я попробовал оба предложения без удачи.Мне удалось заставить его перестать плакать о обратных наклонных чертах, заменив \S на -, поэтому вместо этого регулярное выражение выглядит так: ^ABC--[0-9A-T-.]{24}--[a-z0-9]{40}$

Но теперь оно больше не совпадает, и я думаю, что это из-запунктуация .?Я не уверен, и я надеюсь, что кто-то готов помочь мне исправить это.

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

Для вашего SECOND регулярного выражения, на самом деле оно не соответствует, потому что вы использовали диапазон символов, например [0-9A-T-.]{24}, но в заданной вами входной строке есть символ с именем X поэтому я думаю, что вам нужно изменить существующее регулярное выражение, например A-T на A-Z, тогда оно будет идеально соответствовать вашей строке.

^ABC--[0-9A-Z-.]{24}--[a-z0-9]{40}$

REGEX : https://regex101.com/r/fsp3FS/24

Код Python:

# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility

import re

regex = r"^ABC--[0-9A-Z-.]{24}--[a-z0-9]{40}$"

test_str = "ABC--2000-01-10X13-11-44.237Z--572b3b7681572b3b7681572b3b7681572b3b7681"

matches = re.search(regex, test_str, re.IGNORECASE)

if matches:
    print ("Match was found at {start}-{end}: {match}".format(start = matches.start(), end = matches.end(), match = matches.group()))

    for groupNum in range(0, len(matches.groups())):
        groupNum = groupNum + 1

        print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = matches.start(groupNum), end = matches.end(groupNum), group = matches.group(groupNum)))
0 голосов
/ 16 марта 2019

Укажите свое регулярное выражение как raw string ( r '...' ):

pat = re.compile(r'^ABC\S\S[0-9A-T\S.]{24}\S\S[a-z0-9]{40}$')

В противном случае (в «нормальной» строке) обратные слеши должны быть удвоены.

Пример (рабочий) код:

import re

str = 'ABC--2000-01-10X13-11-44.237Z--572b3b7681572b3b7681572b3b7681572b3b7681'
pat = re.compile(r'^ABC\S\S[0-9A-T\S.]{24}\S\S[a-z0-9]{40}$')
print(pat.match(str).group())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...