2010-12-17 25 views
1

syslogを解析するための正規表現を構築しようとしています。私はサービスを使用する各サーバーを考慮に入れるよう求められました。あなたとのfindAllを見ることができるように...syslogサーバからFQDNを取得するためのPythonの正規表現

>>> string = "2010-12-13T00:00:02-05:00 <local3.info> suba1.suba2.example.com named[29959]: client 192.168.11.53#54608: query: subb1.subb2.example.com" 
>>> regex = re.compile("\s.*?\.example\.com ") 
>>> r = regex.search(string) 
>>> r 
<_sre.SRE_Match object at 0x896dae0bbf9e6bf0> 

# Run findall 
>>> regex.findall(string) 
[u' <local3.info> suba1.suba2.example.com ', u' client 192.168.11.53#54608: query: subb1.subb2.example.com '] 

を私はFQDNを引き出すために、単純な正規表現を書いたが、それはラインのあまりを消費しているようだ。*一般的すぎると正規表現がかかり終わります過ぎる。

答えて

0

\s\bと置き換え、.*?\Sに置き換えます。

>>> regex = re.compile(r'\b\S*\.example\.com') 
>>> regex.findall(string) 
[u'suba1.suba2.example.com', u'subb1.subb2.example.com'] 
+0

\ S * \例\ .COM作品あまりにも –

0

正規表現

r"query: ([\w\.]+)" 

の[...]クエリから終わりをつかむだろうと、あなたはあなただけのドメイン名を与えるために無名のグループのルックアップを使用することができます。

これが必要な出力でない場合は、目的の出力(データ構造として、私はこれを推測しました)を精緻化できますか?

Pythonのコードは次のようになります。

match = re.search(r"query: ([\w.]+)", string, re.IGNORECASE | re.MULTILINE) 
if match: 
    result = match.group(1) 
else: 
    result = "" 

結果使用してみてください

subb1.subb2.example.com 
0
#!/usr/bin/env python 

import re 

s = """2010-12-13T00:00:02-05:00 <local3.info> 
    suba1.suba2.example.com named[29959]: 
    client 192.168.11.53#54608: query: subb1.subb2.example.com""" 

pattern = re.compile("[\S.]+.example.com") 

print pattern.findall(s) 
# => ['suba1.suba2.example.com', 'subb1.subb2.example.com'] 
+0

あなたの答えをありがとう、私は約\ Sを忘れて...その作品スペースで区切られた行に最適です。 –

0

が含まれます。

regex = re.compile("\s\S*?\.example\.com ") 
関連する問題