Regex для извлечения последних двух октетов IP-адреса (3-й и 4-й октет) в Google Sheets - PullRequest
0 голосов
/ 22 апреля 2020

Мне нужна помощь для извлечения последних двух октетов IP-адреса (3-й и 4-й октет) с помощью регулярного выражения.

Это регулярное выражение работает для извлечения первых двух октетов (1-й) и 2-й октет) :

(1? \ d \ d? | 2 [0-4] \ d | 25 [0-5])

Вы можете попробовать это здесь https://rubular.com/r/ynDa71Zd1M2f24

Но я не знаю, как извлечь 3-й и 4-й октет. Кто-нибудь может мне помочь?

  • Вход: 192.168.1.1 Выход: 192.168.0.0/16
  • Вход: 192.168.2.1 Выход: 192.168.0.0/16
  • Вход: 10.10.1.1 Выход: 10.10.0.0/16

Спасибо,

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Вы можете использовать, например, шаблон для соответствия формату, подобному ip, и использовать группу захвата для первых 2 частей, включая точку.

При замене используйте значение группы захвата $1, за которым следует 0.0/16

=REGEXREPLACE(A2,"^(\d{1,3}\.\d{1,3}\.)\d{1,3}\.\d{1,3}$","$10.0/16")

См. Демонстрационную версию regex

enter image description here

0 голосов
/ 22 апреля 2020

Решение

Вы можете использовать что-то вроде этого:

(?P<first>\d{2,3})\.(?P<second>\d{1,3})\.(?P<third>\d{1,3})\.(?P<fourth>\d{1,3})

Или, если у вас нет поддержки именованной группы захвата, просто используйте:

(\d{2,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})

Это разделит ваши строки на четыре разные группы, каждая из которых содержит один октет ip.

Пример

import re

pattern = r"(?P<first>\d{2,3})\.(?P<second>\d{1,3})\.(?P<third>\d{1,3})\.(?P<fourth>\d{1,3})\n?"
matcher = re.compile(pattern)

ips = """
192.168.1.1
192.168.1.2
"""

result = matcher.findall(ips) # [('192', '168', '1', '1'), ('192', '168', '1', '2')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...