Мне нужно разобрать файл (что я знаю, как это сделать), однако мне нужно искать определенные шаблоны в строке, и здесь я немного запутался.
Допустим, у нас есть следующие строки:
GEO1D1JXUQ2LSO
GOE22D2OKDLALKCDSI
EO212D0FM2KDLA
LAFD21D1FM2KDF3BLA
Что известно о строках, так это префикс (GEO, GOE, EO, LAFD) и то, что после префикса есть 1, 2 или 3 цифры, а затем буква D, как показано в примере.
У меня есть префиксы заранее, но это все. Как я могу выполнить поиск по каждой строке и определить, к какой группе она принадлежит?
Примечание: в строке есть некоторая информация (например, число после буквы D), которая мне тоже нужна, но я сосредоточусь только на том, как определить, частью какой группы она является, чтобы затем получить больше информации об этой группе.
Я застрял, потому что есть некоторые префиксы, которые могут существовать внутри префиксов, например EO в GEO.
EO
и GEO
не являются двусмысленными, если они являются префиксами — просто используйте startswith()
.
Пока нет, у меня есть код для предыдущего синтаксического анализа, такого как использование re.compile с поиском и сопоставлением, но здесь я хотел знать, как решить проблему.
@Blorgbeard как насчет префиксов AOI и AOIO?
В этом случае вы можете просто определить порядок своих проверок, чтобы AOIO
проверялся перед AOI
?
Это хороший момент, мне нужно найти очень похожие и сделать это. Если вы опубликуете такой ответ, я проголосую за правильный ответ. Спасибо!
В качестве альтернативы вы можете использовать регулярное выражение для извлечения «всех букв между началом и первым числом» с чем-то вроде ^([A-Z]*)[0-9]
Мне больше нравится это решение, тогда я могу провести прямое сравнение. Кроме того, это может помочь с извлечением других вещей, таких как «от первого числа до последнего числа перед буквой».
Самый простой способ проверить наличие префикса — просто string.startswith()
.
Если у вас есть префиксы, которые являются префиксами других префиксов (например, AOIO
и AOI
), вам просто нужно быть осторожным, чтобы определить порядок ваших проверок, чтобы сначала проверялись более длинные префиксы.
Кроме того, вы можете использовать регулярное выражение для извлечения префикса и другой необходимой информации. Пример:
^([A-Z]*)[0-9]+D([0-9]+)
Это даст вам два групповых захвата, первый из которых будет префиксом, а второй — числом после D
. Подробнее см. здесь: https://regex101.com/r/GxSZSI/2
Пример использования в Python:
>>> import re
>>> s = 'GOE22D2OKDLALKCDSI'
>>> m = re.match('^([A-Z]*)[0-9]+D([0-9]+)', s)
>>> m.groups()
('GOE', '2')
Вы пробовали что-нибудь с точки зрения кода?