Regex, чтобы получить из 10-символьной строки (цифры и текст) первые 4 или 5 символов - PullRequest
0 голосов
/ 24 сентября 2019

То, что я намеревался сделать, это: получить строку из 4-5 символов (обычно означает страну и город) из последовательности из 10 символов.Есть несколько примеров этого.

    TEST IC ITMI12CR01 GRATH1CR01, ALTIR1AB02
TEST-ICITMI12CR01 BE5253, BE2178 and BE40035 towards GRATH1CR01, ROTIM1CR01 and ALTIR1AB02 are down
TEST-IC Multiple links are TRIST1AB01<><>ROTIM1CR01<>GRATH1CR01<>ITMI12CR01
TEST IC ITMI12CR01 links to GRATH1CR01, ALTIR1AB02

Принимая один из примеров выше: ITMI12CR01 и ROTIM1CR01.Для первого экземпляра: получит строка из 10 символов, получит первые 4 символа в группу захвата. Второй экземпляр: получит первые 5 символов в группу захвата.

Считаете ли вы, что этот запрос обоснован?

Спасибо!

1 Ответ

0 голосов
/ 24 сентября 2019

Это должно непосредственно найти совпадение 4 или 5 символов.Если я неправильно понял, что вы ищете, уточните.

import re

s = """TEST IC ITMI12CR01 GRATH1CR01, ALTIR1AB02
TEST-ICITMI12CR01 BE5253, BE2178 and BE40035 towards GRATH1CR01, ROTIM1CR01 and ALTIR1AB02 are down
TEST-IC Multiple links are TRIST1AB01<><>ROTIM1CR01<>GRATH1CR01<>ITMI12CR01
TEST IC ITMI12CR01 links to GRATH1CR01, ALTIR1AB02"""


l = [match.group(1) if match.group(1) else match.group(2)
     for match in re.finditer(r'\b(?:([A-Z]{4})(?:[0-9][A-Z0-9]{5})|([A-Z]{5})(?:[0-9][A-Z0-9]{4}))\b', s)
    ]
print(l)

Отпечатки:

['ITMI', 'GRATH', 'ALTIR', 'GRATH', 'ROTIM', 'ALTIR', 'TRIST', 'ROTIM', 'GRATH', 'ITMI', 'ITMI', 'GRATH', 'ALTIR']

Я ищу либо:

  1. 4 альфасимволы, за которыми следует 1 цифра, за которой следуют 5 буквенно-цифровых символов или.
  2. 5 букв, за которыми следует 1 цифра, за которой следуют 4 буквенно-цифровых символа.

См. демонстрацию

...