Проверить формат строки на основе формата

У меня проблема со следующей задачей. У меня есть строка:

ABCD[A] or A7D3[A,B,C]
  • Первые 4 символа 0-9 или A-Z.
  • 5-й символ [.
  • Символ с 6-го по n-й - это A-Z, за которым следует ,, если букв больше одной. например A, E,F, A,B,C,D,F Я не знаю, есть ли ограничение на количество символов в средней части, поэтому я должен предположить, что оно равно 26 (A-Z).
  • последний символ ].

Мне нужно убедиться, что структура строки такая, как указано выше.

ABCD[A,B]
BD1F[E,G,A,R]
S4P5[C]

Я пробовал с регулярным выражением (в питоне)

r = re.match('^[0-9A-Z]{4}[[A-Z,]+$',text)

Текст является примером строки, однако он не работает. Истина / ложь или 0 или 1 в качестве результата будут в порядке

Любые идеи, как это можно сделать? То, что я видел в Google до сих пор, регулярное выражение будет работать, однако я недостаточно разбираюсь в этом, чтобы решить это самостоятельно.

Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Библиотека для работы с мороженым
Библиотека для работы с мороженым
Лично я попрощался с операторами print() в python. Без шуток.
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Привет, люди RPA, это снова я и я несу подарки! В очередном моем приключении о том, как создавать ботов для облегчения рутины. Вот, думаю, стоит...
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
Учебник по веб-скрапингу
Учебник по веб-скрапингу
Привет, ребята... В этот раз мы поговорим о веб-скрейпинге. Целью этого обсуждения будет узнать и понять, что такое веб-скрейпинг, а также узнать, как...
Тонкая настройка GPT-3 с помощью Anaconda
Тонкая настройка GPT-3 с помощью Anaconda
Зарегистрируйте аккаунт Open ai, а затем получите ключ API ниже.
0
0
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать '[0-9A-Z]{4}\[[A-Z](?:,[A-Z]){,25}\]':

import re
for s in ['ABCD[A,B]', 'BD1F[E,G,A,R]', 'S4P5[C]']:
    print(re.fullmatch(r'[0-9A-Z]{4}\[[A-Z](?:,[A-Z]){,25}\]', s))

Обратите внимание, что (?:,[A-Z]){,25} ограничивает количество букв в квадратных скобках, но не гарантирует, что они не повторяются.

Выход:

<re.Match object; span=(0, 9), match='ABCD[A,B]'>
<re.Match object; span=(0, 13), match='BD1F[E,G,A,R]'>
<re.Match object; span=(0, 7), match='S4P5[C]'>

Демонстрация регулярных выражений

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

Можешь попробовать:

import re

lst = ["ABCD[A,B]", "BD1F[E,G,A,R]", "S4P5[C]", "S4P5[CD]"]
pattern = r"^[A-Z0-9]{4}\[[A-Z](?:,[A-Z])*]$"

for string in lst:
    m = re.match(pattern, string)
    print(bool(m), m)

Выход:

True <re.Match object; span=(0, 9), match='ABCD[A,B]'>
True <re.Match object; span=(0, 13), match='BD1F[E,G,A,R]'>
True <re.Match object; span=(0, 7), match='S4P5[C]'>
False None

Объяснение:

^: начало строки. [A-Z0-9]{4} за получение первых 4 символов. \[ за выход из скобки. [A-Z] первый символ внутри скобки обязателен. (?:,[A-Z])* остальное по желанию. ]$: конец строки.

Примечание-1: вы можете ограничить количество внутренних символов до 25, изменив * на {,25}.

Примечание-2: я не избежал последней скобки, но это не повредит, если хотите (может быть, и лучше).

Это будет неправильно соответствовать S4P5[CD]

mozway 19.02.2023 18:56

@mozway Ой, да. собираюсь исправить это сейчас

S.B 19.02.2023 18:58

@mozway В общем, получилось как у тебя :)

S.B 19.02.2023 19:01

Способов не сотни ;) (я написал "сотни", потому что уверен, что с "десятками" кто-то попытался бы их найти)

mozway 19.02.2023 19:03

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