найти строку после определения группы - PullRequest
0 голосов
/ 18 января 2019

Я перебираю несколько тысяч строк некоторых действительно грязных данных из файла CSV, используя панд. Я перебираю один из столбцов кадра данных, который обычно содержит довольно короткие строки разрозненной каскадной информации о клиенте (имя, местоположение, номера клиентов, номера телефонов и т. Д.).

Существует небольшая разница между номерами клиентов и телефонными номерами, хотя большинство строк в столбце df содержат идентификатор TEL в тексте строки для телефонного номера, как показано ниже (где 0123456 - номер клиента, и 55555 5555 - это номер телефона):

ДЖЕРРИ 0123456 ТЕЛ: 55555 5555 РАСПОЛОЖЕНИЕ ГОРОДА

Я могу удалить пробел из цифр, следующих за индикатором TEL:, но не могу сформулировать регулярное выражение, которое вытягивает текст только после индикатора TEL :. Мой идеальный вывод в моем новом столбце df ["TEL") может быть 555555555.

Пока что у меня есть регулярное выражение (обратите внимание, что некоторые телефонные номера имеют разную длину для работы с международными абонентами, некоторые из которых включают код страны, а некоторые нет):

re.match (r '(TEL)?:?? [0-9] {9-12}'). Group ()

Тем не менее, приведенное выше регулярное выражение по-прежнему извлекает фрагмент TEL строки, с которой я сопоставляю. Как я могу исправить эту ошибку?

Ответы [ 2 ]

0 голосов
/ 18 января 2019

re.match(r'(?:TEL)?:? ?([0-9 ]{9-12})').group(1)

(?:...) делает группу без захвата ([0-9 ]{9-12}) захватывает эту часть как группу (1)

0 голосов
/ 18 января 2019

Вы можете использовать позитивный взгляд назад.

(?<=TEL: )[0-9 ]{9,12}

Таким образом он проверяет, находится ли строка «TEL:» за числами.

Однако может быть лучше перебрать строку, и когда она встретит строку TEL, пропустите два символа и возьмите следующие цифры.

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