将REGEX字符串传递给re.search

时间:2013-03-29 20:01:16

标签: python regex

在尝试将变量替换为re.search时,我陷入困境 我使用以下代码从文件中收集存储的正则表达式并将其保存到变量“regex”。在此示例中,存储的正则表达式用于从日志消息中查找具有端口号的IP地址。

for line in workingconf:
    regexsearch = re.search(r'regex>>>(.+)', line)
    if regexsearch:
        regex = regexsearch.group(1)
        print regex

#I use re.search to go through "data" to find a match.

data = '[LOADBALANCER] /Common/10.10.10.10:10'
alertforsrch = re.search(r'%s' % regex, data)
if alertforsrch:
    print "MATCH"
    print alertforsrch.group(1)
else:
    print "no match"

当这个程序运行时,我得到以下内容。

$ ./messageformater.py
/Common/([\d]{1,}\.[\d]{1,}\.[\d]{1,}\.[\d]{1,}:[\d]{1,})
no match

当我将re.search更改为以下内容时,它可以正常工作。正则表达式将从文件中获取,并且每次都可能不一样。这就是我尝试使用变量的原因。

for line in workingconf:
    regexsearch = re.search(r'regex>>>(.+)', line)
    if regexsearch:
        regex = regexsearch.group(1)
        print regex


alertforsrch = re.search(r'/Common/([\d]{1,}\.[\d]{1,}\.[\d]{1,}\.[\d]{1,}:[\d]{1,})', data)
if alertforsrch:
    print "MATCH"
    print alertforsrch.group(1)
else:
    print "no match"

####### Results ########
$./messageformater.py
/Common/([\d]{1,}\.[\d]{1,}\.[\d]{1,}\.[\d]{1,}:[\d]{1,})
MATCH
10.10.10.10:10

1 个答案:

答案 0 :(得分:0)

对我来说很好......

为什么甚至打扰字符串格式化程序呢? re.search(正则表达式,数据)应该可以正常工作。

在文件中读取正则表达式的末尾可能有换行符 - 尝试re.search(regex.strip(),data)