Поиск IP-адреса из файла CSV - PullRequest
3 голосов
/ 21 октября 2019

У меня есть CSV-файл, в котором столбцы содержат несколько строк с IP-адресами. Я успешно выполнил запрос регулярного выражения, но он добавляет случайные символы в вывод.

descr = df.loc[:, 'desc']

arr = []


pat = re.compile("(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)")

for i in descr:

     test = pat.findall(i)
     arr.append(test)

df["IPA"] = arr

Это дает вывод IP-адреса, но я хочу выводить как 10.35.50.4 и т. Д. [(10, 35, 50, 4)] и [(10, 35, 50, 3)].

1 Ответ

1 голос
/ 21 октября 2019

Вам нужно преобразовать свои группы (все, что в скобках) в группы без захвата. Вы можете сделать это, добавив «?:» Сразу после открытия скобок.

pat = re.compile("(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)")

Причина написана в определении функции «findall»:

Returnвсе неперекрывающиеся совпадения шаблона в строке, как список строк. Строка сканируется слева направо, и совпадения возвращаются в указанном порядке. Если в шаблоне присутствует одна или несколько групп, вернуть список групп;это будет список кортежей, если шаблон содержит более одной группы . Пустые совпадения включены в результат.

Поэтому он возвращал все группы, числа внутри вашего адреса, отдельно.

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