Python - 在正则表达式中使用变量

3
当我运行下面的代码时,没有得到预期的输出。请纠正我。
import socket
import re
NodeName=socket.gethostname()
change_hostname_list=['/etc/hosts1','/etc/sysconfig/network1']
for file in change_hostname_list:
        infile=open(file,'r').read()
        print NodeName
        print file
        if re.search('NodeName',file):
                print "DOOO"

我需要输出"DOOO"

���我得到的结果如下:

root@test06> python test.py
test06
/etc/hosts1
test06
/etc/sysconfig/network1
root@test06>

你确定你没有在寻找错误的东西吗?也许尝试一下 re.search(file, NodeName) - Nebril
3个回答

1
替换这个:
if re.search('NodeName',file):

收件人:

if re.search(NodeName,infile):

变量不需要加引号,文件变量是从列表中获取的文件名,变量 file 包含了文件的内容。

以下是示例:

>>> import socket
>>> import re
>>> f = open('/etc/hosts')
>>> host_name =  socket.gethostname()
>>> host_name
'hackaholic'
>>> for x in f:
...     print(x)
...     if re.search(host_name,x):
...         print("found")
... 
127.0.0.1   localhost

127.0.0.1   hackaholic

found     # it founds the host name in file
# The following lines are desirable for IPv6 capable hosts

::1     localhost ip6-localhost ip6-loopback

ff02::1 ip6-allnodes

ff02::2 ip6-allrouters

NodeName 可以包含特殊的正则表达式字符。看看我的回答 - 你也许可以使用 string.find - Nebril
更改为 infile 并尝试旧的 substring find(),两者都可以工作 :) - Gopi
你给的变量名字不对,所以它没有工作。 - Hackaholic

1
如果NodeName是字符串,就应该在文件中进行字符串搜索,去掉引号。
import socket
import re
NodeName=socket.gethostname()
change_hostname_list=['/etc/hosts1','/etc/sysconfig/network1']
for file in change_hostname_list:
    infile=open(file,'r').read()
    print NodeName
    print file
    if re.search(NodeName,file):
        print "DOOO"

如果您需要使用一些正则表达式的好处,可以将变量连接起来创建正则表达式字符串,并将其传递给re.search
另外,如果您不需要任何正则表达式功能,只需要普通的子字符串搜索,可以使用以下方式使用字符串函数find
if file.find(NodeName):
    print "DOOO"

这不会起作用,它是 infile 而不是 file,这不是关于搜索和找到,而是关于变量名。 - Hackaholic

0

您似乎将字符串'NodeName'作为模式传递给re.search(),而不是变量NodeName。请在您提供的代码的第9行中删除单引号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接