У меня есть простой скрипт для объединения через 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
. Любая помощь в этом будет принята с благодарностью.
Отвечает ли это на ваш вопрос? Регулярное выражение Python re.match, почему этот код не работает?
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] будет соответствовать ему.
Попробуйте так: r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$" Замените регулярное выражение этим