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

时间:2014-12-09 13:25:31

标签: python regex

当我运行下面的代码时,我没有得到预期的输出。 请纠正我..

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>

3 个答案:

答案 0 :(得分:1)

替换这个:

if re.search('NodeName',file):

到:

if re.search(NodeName,infile):

你不需要变量引用,文件变量是列表中的文件名,变量文件中有文件的内容。

这是演示:

>>> 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

答案 1 :(得分: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"

答案 2 :(得分:0)

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