Как правильно использовать регулярное выражение, чтобы найти первые 3 буквы релевантности в следующих строках - PullRequest
2 голосов
/ 18 февраля 2020

У меня есть следующие варианты строк.

i) ABC17 / REV100 / ABC17

ii) 17ABC / REV100 / ABC17

iii) ABC17 / REV100 / 17AB C

iv) 17ABC / REV100 / 17AB C

v) REV100 / 17AB C

vi) REV100 / 17

vii) 17ABC / REV100

viii) 17 / REV100

ix) REV100

Во всех этих случаях три буквы REV - это те, которые я хочу извлечь. Как мне установить правильный шаблон для соответствия трем буквам во всех этих строках?

РЕДАКТИРОВАТЬ:

Это не всегда должен быть REV ИЛИ ABC17, это могут быть другие буквы. правило заключается в том, что он всегда находится в том месте, где REV находится в строках примера.

Мой шаблон не может соответствовать всем строкам, например

 '[0-9]?[A-Z]?.*?/?([A-Z]{3}.*?)','REV100/ABC17').group(1) 
  prints ABC

Как правильно написать рисунок

1 Ответ

4 голосов
/ 18 февраля 2020

Вы можете использовать необязательную группу, соответствующую 1 или более символам AZ или цифрам 0-9, поскольку они располагаются в другом порядке и соответствуют прямому sla sh.

Затем используйте группу захвата, чтобы захватить первые 3 заглавные буквы AZ после прямого слэ sh.

^(?:[A-Z0-9]+/)?([A-Z]{3})
  • ^ начало строки
  • (?: группа без захвата
    • [A-Z0-9]+/ Совпадение 1+ вхождений любого из перечисленных
  • )? Закрыть группу и сделать ее необязательной
  • ([A-Z]{3}) Захватить группу 1, сопоставить 3 заглавных буквы

Regex demo | Python демо

Если должно быть 3 цифры:

^(?:[A-Z0-9]+/)?([A-Z]{3})\d{3}

Например

import re

items = [
    "ABC17/REV100/ABC17",
    "17ABC/REV100/ABC17",
    "ABC17/REV100/17ABC",
    "17ABC/REV100/17ABC",
    "REV100/17ABC",
    "REV100/17",
    "17ABC/REV100",
    "17/REV100",
    "REV100"
    ]

for item in items:
    print(re.match('^(?:[A-Z0-9]+/)?([A-Z]{3})\d{3}',item).group(1))

Выход

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