регулярное выражение для поиска подстроки (номерного знака транспортного средства) в matlab из длинной строки?
У меня есть длинная строка типа " sdnak hsd fds fnsdf APsdf09sdf BN fddsdalf 7886sd f "из этой строки я должен извлечь" AP09BN7886", который на самом деле является номерным знаком автомобиля в Индии. Я знаю, что, возможно, проще всего использовать регулярное выражение, может ли кто-нибудь сказать мне reg. exp, чтобы найти это.
3 ответа:
Как я понимаю формат , индийские номерные знаки:
- две прописные латинские буквы, представляющие индийский штат-так что это
[A-Z]{2}
- две цифры, представляющие последовательный номер в этом состоянии, так что это
\d{2}
- затем четыре цифры, префиксированные буквами, когда они заканчиваются цифрами; так что
[A-Z]*\d{4}
(Число 1 и число 2 вместе взятые являются RTO по штату и району)
Вы пытаетесь собрать компоненты из длинной строки, и вы не указали достаточно подробно другие части строки, чтобы полностью устранить двусмысленность (например: буквы все строчные или нелатинские символы? Только один номерной знак на строку? Только две буквы, предваряющие четыре цифры? и т. д.) Поскольку это неизвестно, Вы можете представить "море" символов между группами совпадений с помощью
.*?
Переменные буквы, предшествующие 4-значному числу, особенно неоднозначны, поскольку могут быть несвязанные прописные латинские буквы в строке.
Вы можете использовать следующее регулярное выражение find the examples но я бы не сказал, что найду каждую запятую во всех строках:
Затем объедините четыре группы захвата. Если вы хотите быть более конкретным, используйте изменение для первых двух букв в соответствии с двумя буквенными кодами для штатов Индии.([A-Z]{2}).*?(\d{2}).*?([A-Z]{2}).*?(\d{4})
Например:
(AS|NL|MH etc).*?(\d{2}).*?([A-Z]{2}).*?(\d{4})
Или используйте более полный матч по RTO
Если вы можете дополнительно уточнить, что такое "другое" между группами захвата, вы можете использовать класс отрицательных символов или якорь.* чтобы быть более точным:Тогда вам нужно подумать об исключениях (специальные коды региона Дели, дипломатические номера, номера тщеславия, военные номера, o boy...)# pseudo regex... # XXX is (match or skip or anchor the in between stuff...) (AS|NL|MH etc)XXX(\d{2})XXX([A-Z]*)XXX(\d{4})
Насколько я понимаю, вам просто нужно удалить строчные буквы и пробелы. Вероятно, наиболее эффективным решением было бы использовать не регулярные выражения, а следующий код:
s = 'sdnak hsd fds fnsdf APsdf09sdf BN fddsdalf 7886sd f'; s(s~=upper(s) | s==32) = [];
Лучший,
Рабочий пример в Matlab:
str = ['sdnak hsd fds 57 fnsdf APsdf09sdf BN fddsdalf 7886sd f']; expression = '([A-Z]{2}).*?(\d{2}).*?([A-Z]{2}).*?(\d{4})' tokens = regexp(str,expression,'tokens') result = cell2mat(tokens{1}) ----------------------------------------------------------------- result = AP09BN7886