Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python打印(项目)不';不显示任何输出_Python_Regex - Fatal编程技术网

Python打印(项目)不';不显示任何输出

Python打印(项目)不';不显示任何输出,python,regex,Python,Regex,在第一次打印(项目)时,我得到了我想要的结果。但是在第二个print(item),(查找IP的正则表达式)没有打印任何内容。我做错了什么 代码基本上是在文本文件中搜索其中的所有IP。 然后我尝试在显示ip之前添加一个字符串 txt文件: 我希望输出如下: IP Arp - ITF Omn-tool-A-192.168.0.1 IP Arp - ITF Omn-tool-A-192.168.0.2 IP Arp - ITF Omn-tool-

在第一次
打印(项目)
时,我得到了我想要的结果。但是在第二个
print(item)
,(查找IP的正则表达式)没有打印任何内容。我做错了什么

代码基本上是在文本文件中搜索其中的所有IP。 然后我尝试在显示ip之前添加一个字符串

txt文件: 我希望输出如下:

IP Arp - ITF Omn-tool-A-192.168.0.1                     
IP Arp - ITF Omn-tool-A-192.168.0.2       
IP Arp - ITF Omn-tool-A-192.168.0.3       
IP Arp - ITF Omn-tool-A-192.168.0.4     
IP Arp - ITF Omn-tool-A-192.168.0.5    
IP Arp - ITF Omn-tool-A-192.168.0.6     
IP Arp - ITF Omn-tool-A-192.168.0.7


IP Arp - ITF Omn-b-192.168.0.8     
IP Arp - ITF Omn-b-192.168.0.9       
IP Arp - ITF Omn-b-192.168.0.10       
IP Arp - ITF Omn-b-192.168.0.11     
IP Arp - ITF Omn-b-192.168.0.12   
IP Arp - ITF Omn-b-192.168.0.13    
IP Arp - ITF Omn-b-192.168.0.14     
IP Arp - ITF Omn-b-192.168.0.15     
IP Arp - ITF Omn-b-192.168.0.16   
IP Arp - ITF Omn-b-192.168.0.17  
这是我的密码:

打开(Sw0,'r')作为f:
对于f中的第1行:
#如果在\u文件中:
line1=line1.拆分(“”)
对于第1行中的项目:
如果重新搜索(r'^[a-zA-Z]+\\\[a-zA-Z]+',项目):
匹配=重新搜索(r'[a-zA-Z]+\\\[a-zA-Z]+',项目)
data0.append(match.group(0))
对于f中的项目:
#节头
匹配=重新搜索(r'IP Arp[^Extn-]*-\s*(\w+),项)
如果匹配项不是无:
节=匹配。组(0)
打印(项目)
#打印(部分)
持续
对于f中的项目:
match=re.search(r'^\d+\.\d+\.\d+\.\d+',项)
打印(项目)
如果匹配项不是无:
data5.append({'section':section,'ip':match.group(0)})
打印(项目)
对于数据5中的d:
打印(“{}{}.”格式(d['section'],d['ip']))

您不需要读取文件
f
两次。只需迭代一次,如果您找到一个报头,则更新当前报头并查找其下的所有IP地址。我们仍然可以在这里使用
continue
返回到
中的f行
查找标头时,因为不需要在当前行上搜索IP地址。此外,我们不需要一直呼叫
re.search
。只需先检查它是否不是
None
,然后调用
.group(0)

我还认为
^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
是搜索IPv4地址的更合适的模式,因为每个八位组只能有0到255之间的数字。我还使用了
iparp.*
模式来查找报头,因为报头似乎需要以
iparp
开头,并且任何字符/s都可以在它之后,因此出现了
*

以下是您可以做的:

from re import search

with open("data.txt") as f:

    header = None
    for line in f:
        header_match = search(r'IP Arp .*', line)
        if header_match:
            header = header_match.group(0)
            continue

        ip_address = search(r'^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', line)
        if ip_address:
            print(f"{header}-{ip_address.group(0)}")
输出:

IP Arp - ITF Omn-tool-A-192.168.0.1
IP Arp - ITF Omn-tool-A-192.168.0.2
IP Arp - ITF Omn-tool-A-192.168.0.3
IP Arp - ITF Omn-tool-A-192.168.0.4
IP Arp - ITF Omn-tool-A-192.168.0.5
IP Arp - ITF Omn-tool-A-192.168.0.6
IP Arp - ITF Omn-tool-A-192.168.0.7
IP Arp - ITF Omn-b-192.168.0.8
IP Arp - ITF Omn-b-192.168.0.9
IP Arp - ITF Omn-b-192.168.0.10
IP Arp - ITF Omn-b-192.168.0.11
IP Arp - ITF Omn-b-192.168.0.12
IP Arp - ITF Omn-b-192.168.0.13
IP Arp - ITF Omn-b-192.168.0.14
IP Arp - ITF Omn-b-192.168.0.15
IP Arp - ITF Omn-b-192.168.0.16
IP Arp - ITF Omn-b-192.168.0.17

您不需要读取文件
f
两次。只需迭代一次,如果您找到一个报头,则更新当前报头并查找其下的所有IP地址。我们仍然可以在这里使用
continue
返回到
中的f行
查找标头时,因为不需要在当前行上搜索IP地址。此外,我们不需要一直呼叫
re.search
。只需先检查它是否不是
None
,然后调用
.group(0)

我还认为
^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
是搜索IPv4地址的更合适的模式,因为每个八位组只能有0到255之间的数字。我还使用了
iparp.*
模式来查找报头,因为报头似乎需要以
iparp
开头,并且任何字符/s都可以在它之后,因此出现了
*

以下是您可以做的:

from re import search

with open("data.txt") as f:

    header = None
    for line in f:
        header_match = search(r'IP Arp .*', line)
        if header_match:
            header = header_match.group(0)
            continue

        ip_address = search(r'^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', line)
        if ip_address:
            print(f"{header}-{ip_address.group(0)}")
输出:

IP Arp - ITF Omn-tool-A-192.168.0.1
IP Arp - ITF Omn-tool-A-192.168.0.2
IP Arp - ITF Omn-tool-A-192.168.0.3
IP Arp - ITF Omn-tool-A-192.168.0.4
IP Arp - ITF Omn-tool-A-192.168.0.5
IP Arp - ITF Omn-tool-A-192.168.0.6
IP Arp - ITF Omn-tool-A-192.168.0.7
IP Arp - ITF Omn-b-192.168.0.8
IP Arp - ITF Omn-b-192.168.0.9
IP Arp - ITF Omn-b-192.168.0.10
IP Arp - ITF Omn-b-192.168.0.11
IP Arp - ITF Omn-b-192.168.0.12
IP Arp - ITF Omn-b-192.168.0.13
IP Arp - ITF Omn-b-192.168.0.14
IP Arp - ITF Omn-b-192.168.0.15
IP Arp - ITF Omn-b-192.168.0.16
IP Arp - ITF Omn-b-192.168.0.17

你读过两遍吗?f:s中的项有两个
。这似乎就是问题所在。另外,无需重复
re.search
,使用
m=re.search(…)
,然后如果m:print(m.group())
,则使用
。您的意思是我不应该在“continue”之后的f:for中有一个for项吗。他没有打印任何想法,请在问题中加入代表性的输入样本。理想情况下,将从文件中读取的代码替换为一个更简单、最小的代码段,该代码段只处理一个静态字符串,而不是您想要的。另请参阅,特别是提供缩进的指南。这是代码的实际缩进吗?
continue
是无保护的,在同一缩进级别上,它之后的所有代码都将被跳过。
continue
中止当前循环迭代,并立即开始下一个循环迭代(对于f:
行中的项,它“跳回”到
)。如果使用
继续
,而不使用
If
保护它,则在它运行后,不会有任何代码。为什么在这里使用
continue
?是否阅读
f
两次?f:
s中的项有两个
。这似乎就是问题所在。另外,无需重复
re.search
,使用
m=re.search(…)
,然后如果m:print(m.group())
,则使用
。您的意思是我不应该在“continue”之后的f:for中有一个for项吗。他没有打印任何想法,请在问题中加入代表性的输入样本。理想情况下,将从文件中读取的代码替换为一个更简单、最小的代码段,该代码段只处理一个静态字符串,而不是您想要的。另请参阅,特别是提供缩进的指南。这是代码的实际缩进吗?
continue
是无保护的,在同一缩进级别上,它之后的所有代码都将被跳过。
continue
中止当前循环迭代,并立即开始下一个循环迭代(对于f:
行中的项,它“跳回”到
)。如果使用
继续
,而不使用
If
保护它,则在它运行后,不会有任何代码。为什么在这里使用
continue
?它工作正常,但我如何将最终输出添加到名为data5的变量?好的,谢谢,我还有一个问题,它不允许我在“…Omn-b-192”上拆分,因为它是一个字符串,所以我无法导出它并将其添加到csv文件的两个不同单元格中。有没有我可以像“…Omn-b”,“192.168.0.17”那样拆分的字符串,所以我必须使用不同的字符串来处理csv文件?它工作得很好,但是如何