Python re.findall如何返回重复匹配

Python re.findall如何返回重复匹配,python,findall,Python,Findall,我有html中的IP:PORT列表,当我使用findall搜索所有IP时,我会得到所有IP的列表,因为IP是唯一的,有些端口是相同的,我通过示例得到100个IP的列表,只有87个端口。如何找到具有重复端口的所有端口 proxies = re.findall("[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}",html) ports = re.findall("[0-9]{1,3}\,[0-9]{1,3}\,[0-9]{1,3}\,[0-9]{1,3

我有html中的IP:PORT列表,当我使用findall搜索所有IP时,我会得到所有IP的列表,因为IP是唯一的,有些端口是相同的,我通过示例得到100个IP的列表,只有87个端口。如何找到具有重复端口的所有端口

proxies = re.findall("[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}",html)

ports = re.findall("[0-9]{1,3}\,[0-9]{1,3}\,[0-9]{1,3}\,[0-9]{1,3}",html)
#ports are coded to looks like this 47,46,47,46

print len(proxies)
print len(ports)

没有看到源文件,我只能提出一些基本观点

  • 端口号不限于3位数字,因此不包括任何超过999的端口
  • 端口号是否仅显示为4个端口的列表?您说过格式是IP:PORT的列表,但这不是您要检查的内容
编辑:

请更仔细地查看页面的来源。有些条目没有4个端口号

<tr>
    <td class="t_ip">151.9.233.6</td>
    <td class="t_port">50,42</td>
    <td class="t_country"><img src="/images/flags/it.png" alt="it" />Italy</td>
    <td class="t_anonymity">

            High

    </td>
    <td class="t_https">-</td>
    <td class="t_checked">00:02:16</td>
    <td class="t_check">
        <a href="" class="a_check" >check</a>
    </td>
</tr>

注意:IP地址表达式将匹配无效的IP地址。

不确定这是否会对您有太多帮助,但这只是另一个选项:

txt = """
<tr>
    <td class="t_ip">151.9.233.6</td>
    <td class="t_port">50,42</td>
    <td class="t_country"><img src="/images/flags/it.png" alt="it" />Italy</td>
    <td class="t_anonymity">

            High

    </td>
    <td class="t_https">-</td>
    <td class="t_checked">00:02:16</td>
    <td class="t_check">
        <a href="" class="a_check" >check</a>
    </td>
</tr>    
"""

txt = [line.strip() for line in txt.split('\n')]

#clstaglen = len('</td>') => 5
getVals = lambda startTxt: [line[len(startTxt):len(line)-5] for line in txt if line.startswith(startTxt)]

print getVals('<td class="t_ip">')
print getVals('<td class="t_port">')
txt=”“”
151.9.233.6
50,42
意大利
高
-
00:02:16
"""
txt=[line.strip()表示txt.split('\n')中的行]
#clstaglen=len(“”)=>5
getVals=lambda startTxt:[line[len(startTxt):len(line)-5]对于txt中的行,如果line.startswith(startTxt)]
打印getVals(“”)
打印getVals(“”)

能否显示用于查找匹配项和修剪非唯一结果的代码?能否提供一些示例数据?您完全有可能同时获得两个集合,但查看输入将使确定更容易。但为什么不找到所有具有IP:Port组合的字符串,然后按您需要的方式简单地拆分结果呢?为了澄清此站点上的IP:Port列表,没有确切的IP:Port格式。。
txt = """
<tr>
    <td class="t_ip">151.9.233.6</td>
    <td class="t_port">50,42</td>
    <td class="t_country"><img src="/images/flags/it.png" alt="it" />Italy</td>
    <td class="t_anonymity">

            High

    </td>
    <td class="t_https">-</td>
    <td class="t_checked">00:02:16</td>
    <td class="t_check">
        <a href="" class="a_check" >check</a>
    </td>
</tr>    
"""

txt = [line.strip() for line in txt.split('\n')]

#clstaglen = len('</td>') => 5
getVals = lambda startTxt: [line[len(startTxt):len(line)-5] for line in txt if line.startswith(startTxt)]

print getVals('<td class="t_ip">')
print getVals('<td class="t_port">')