Регулярное выражение для соответствия SINXX11-111111 - PullRequest
1 голос
/ 27 октября 2019

То, что регулярное выражение будет искать шаблоны:

(these 3 letters) (any Two letters) (any two numbers)  (a -)  (followed by any 6 numbers)
SIN               XX                11                  -      111111

Например:

SINDE19-008765

Моя попытка до сих пор

re.findall(r'SIN^[a-zA-Z]{2}\d{2}/-/\d{6}')

, но это не таквозвращать любые совпадения.

Для контекста это будет приведено в следующем коде для извлечения совпадений этого шаблона из объединенной строки выписки по счету.

Bank_Statement['TIDY'] = Bank_Statement['CONCATENATED'].map(lambda x: ','.join(re.findall(r'SIN^[a-zA-Z]{2}\d{2}/-/\d{6}', x)))

Ответы [ 2 ]

3 голосов
/ 27 октября 2019

^ означает начало строки, которую вы могли бы поставить перед SIN Ваш шаблон также содержит /-/, что в буквальном смысле соответствует этому.

Ваш шаблон может выглядеть как

^SIN[a-zA-Z]{2}\d{2}-\d{6}

Regex demo

Другим вариантом сопоставления любых двух букв может быть сопоставление символа слова, кроме символа подчеркивания и цифр [^\W_\d] с использованием отрицательного класса символов.

^SIN[^\W_\d]{2}\d{2}-\d{6}
0 голосов
/ 27 октября 2019

Как указывает Четвертая птица в комментариях, каретка и косая черта в вашем регулярном выражении излишни. Удаление их дает в точности то, что вы хотите:

SIN[a-zA-Z]{2}\d{2}-\d{6}

Символ каретки в регулярном выражении соответствует началу строки (или в многострочном режиме, также после каждого переноса строки), а прямой слеш соответствует ... ну просто слеш. Таким образом, ваше исходное регулярное выражение не будет соответствовать чему-либо, потому что перед началом строки не может быть букв (и строка должна будет добавить косую черту вокруг дефиса после исправления проблемы с кареткой, прежде чем она будет сопоставлена).

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