Python повторно соответствует IP-адресу

У меня есть простой скрипт для объединения через ip-адреса. Я хотел бы регулярно использовать ip из следующего вывода

Starting Nmap 7.91 ( https://nmap.org ) at 2020-12-11 15:04 EST
Nmap scan report for host.com (127.0.0.1)
Host is up (0.14s latency).

Я пробовал использовать этот инструмент: https://pythex.org/. Мне удалось получить совпадение со следующим шаблоном

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

однако этот код возвращает 0 совпадений

regex = re.match("(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})",output)
print(regex)

ожидаемый результат должен быть 127.0.0.1. Любая помощь в этом будет принята с благодарностью.

Попробуйте так: r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$" Замените регулярное выражение этим

Sachin Rajput 12.12.2020 04:45

Отвечает ли это на ваш вопрос? Регулярное выражение Python re.match, почему этот код не работает?

Nick 12.12.2020 05:07
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
153
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

re.match соответствует шаблону в начале заданной строки. Похоже, вам нужно re.findall или re.search:

output = '''
Starting Nmap 7.91 ( https://nmap.org ) at 2020-12-11 15:04 EST
Nmap scan report for host.com (127.0.0.1)
Host is up (0.14s latency).'''

regex = re.findall("(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})", output)

print(regex) # ['127.0.0.1']

Вы должны использовать re.search

>>> import re
>>> text = 'Nmap scan report for host.com (127.0.0.1)'
>>> re.search(r"(?:[0-9]{1,3}\.){3}[0-9]{1,3}", text).group()
'127.0.0.1'

с re.match вы можете использовать его следующим образом:

output = 'Your output'
ip = re.match(r'\(([\d\.]*)\)').groups()[0]

Объяснение: re.match вернет класс, заключенный в квадратные скобки и имеющий "." и только цифры. Затем groups() вернет все соответствующие группы. строка с индексом [0] будет соответствовать ему.

Другие вопросы по теме