1

我需要在文件的一行末尾匹配一个字符串。

该文件的内容是:

   network1:
     type: Internal

我已经制作了这个正则表达式来获取第一行,但它不匹配任何内容。请注意,我的代码要求是将要匹配的字符串存储在变量中。所以:

var1 = 'network1'
re.match('\s+%s:'%var1,line)

但是,当我在解释器上检查这个正则表达式时,它可以工作。

>> import re 
>> line = '  network1:'
>> var1 = 'network1'
>> pat1 =  re.match('\s+%s:'%var1,line)
>> var2 = pat1.group(0)
>> print var2
     '  network1:'
4

1 回答 1

3

您需要使用re.search函数,因为 match 尝试从头开始匹配字符串。

var1 = 'network1'
print(re.search(r'.*(\s+'+ var1 + r':)', line).group(1))

例子:

>>> import re
>>> s = 'foo network1: network1:'
>>> var1 = 'network1'
>>> print(re.search(r'.*(\s+'+ var1 + r':)', s).group(1))
 network1:
>>> print(re.search(r'.*(..\s+'+ var1 + r':)', s).group(1)) # to check whether it fetches the last string or not.
1: network1:

所以,你应该这样做

with open(file) as f:
    for line in f:
        if var1 in line:
            print(re.search(r'.*(\s+'+ var1 + r':)', s).group(1))
于 2015-05-16T14:13:15.327 回答