Python正则表达式从IP字符串中删除端口号

我有一个文本文件,其中包含文本行和带端口号的 IP,我想删除端口号并仅打印 IP。

文本文件示例:

  • 77.55.211.77:8080

  • 无IP

  • 79.127.57.42:80

期望的输出:

  • 77.55.211.77

  • 79.127.57.42

我的代码:

import re


with open('IPs.txt', 'r') as infile: 

    for ip in infile:

        ip = ip.strip('\n')

        IP_without_port_number = re.sub(r'((?::))(?:[0-9]+)$', "", ip)

        re_for_IP = re.match(r'^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$',ip)

        print(IP_without_port_number)

我不明白为什么当我打印到控制台“IP_without_port_number”时我看到所有行作为输出


一只名叫tom的猫
浏览 526回答 4
4回答

泛舟湖上清波郎朗

您所需要的只是第二场比赛:import rewith open('IPs.txt', 'r') as infile:    for ip in infile:        re_for_IP = re.match(r'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})', ip)        if re_for_IP:            print(re_for_IP[0])输出:77.55.211.7779.127.57.42单线:import reips = []with open('IPs.txt', 'r') as infile:    ips = [ip[0] for ip in [re.match(r'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})', ip) for ip in infile] if ip]print(ips)

互换的青春

我想出了这个正则表达式代码,它对我有用而且很简单。import retext = input("Input text: ")pattern = re.findall(r'\d+\.\d+\.\d+\.\d+', text)print(pattern)

慕虎7371278

您不需要正则表达式,:在读取该行时对字符使用 split 函数。然后您将得到一个包含两个位置的数组,第一个仅包含 IP 地址,另一个包含端口。

开心每一天1111

尝试这个:import reregex = '''^(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.(             25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.(             25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.(             25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)$'''with open('IP.txt', 'r') as infile:     for ip in infile:        ip = ip.strip('\n')        IP_without_port_number = re.sub(r':.*$', "", ip)        re_for_IP = re.match(r'^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$',ip)        if(re.search(regex, IP_without_port_number)):              print(IP_without_port_number)输出:77.55.211.7779.127.57.42
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python