0

変数を 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
4

1 に答える 1

0

私にとってはうまくいきます...

しかし、なぜ文字列フォーマッタを気にするのでしょうか? re.search(regex, data) は正常に動作するはずです。

ファイルから読み取った正規表現の最後に改行文字がある場合があります- re.search(regex.strip(), data) を試してください

于 2013-03-29T20:17:00.947 に答える