2016-08-10 3 views
0

私はこのカスタムログイベントを持っています。このカスタムイベントはすべてのイベントで2回繰り返されます(Severity: HIGH)。私は正規表現を使って最初のオカレンスとマッチさせ、それを削除/置き換えようとしました。最初の一致を削除/置換する前に、最初の一致を選択しようとしましたが、正規表現が両方の一致にマッチしました。Regexを使用して最初のオカレンスとマッチさせる方法

Host: Hostname 
VServer: NO 
Version: Oracle v11 
Cause: SQL exception 
Severity: HIGH 
JDKPath: C:\Program Files\Java\jdk1.7.0\bin 
Process: 2816 
Severity: HIGH 

これが出現(Severity:)(.*)または(Severity:\s.*)の両方に一致私の正規表現です。 2番目のオカレンス(つまり最後の行)ではなく、最初のオカレンス(つまり5番目のライン)のみをマッチングする方法はありますか?パイソン、re.search

+0

質問を絞り込み、可能なすべての言語でタグ付けする必要はありません。 -1 –

+0

あなたの '(重大度:)(。*)'パターンはすでに動作しています。あなたは同じ解決策で答えを受け入れました。修飾子を使用することは、正規表現のフレーバーに完全に依存し、何も表示されません。 –

答えて

1

あなたの質問から、それはあなたが正規表現を使用しているどのコンテキストでは明らかではない(あなたはPHPやPythonをタグ付けされた)が、PHPで、それは非常に簡単です:

/(Severity:.*)/ 

demo

これが原因で、デフォルトで動作しますが、.*トークンが改行文字と一致しません。 Severityのリスティングは複数の行にあるため、最初の行のみが一致します。

+0

答えをありがとう、私は両方の出現に一致するhttp://regexr.com/を使用しています。 – Prime

+1

@Primeグローバルフラグを残した場合にのみ、両方のマッチを見ることができます。私の答えではない '/.../ g 'のようです。 RegExrでは、私の解決策をテストするために、そのフラグ(右上のフラグオプション)を削除する必要があります。 – BeetleJuice

+0

@thanksグローバルフラグを削除する/ gは働いた – Prime

1

:正規表現パターンマッチを生成し、対応するMatchObjectインスタンスを返す最初の場所を探してストリングスルー

スキャン。文字列内の位置がパターンと一致しない場合は、Noneを返します。これは、文字列のある点でゼロ長の一致を見つけることとは異なることに注意してください。

>>> import re 
>>> 
>>> log = """Host: Hostname 
... VServer: NO 
... Version: Oracle v11 
... Cause: SQL exception 
... Severity: HIGH 
... JDKPath: C:\Program Files\Java\jdk1.7.0\bin 
... Process: 2816 
... Severity: HIGH""" 
>>> 
>>> m = re.search('Severity\: (.*)', log) 
>>> m.groups() 
('HIGH',) 

あなたが見ることができるように、最初のものだけが一致しました。あなたがre.findallre.finditerを使用している場合

は逆に、あなたは両方を取得:

>>> b = re.findall('Severity\: (.*)', log) 
>>> b 
['HIGH', 'HIGH'] 
>>> 
>>> for f in re.finditer('Severity\: (.*)', log): 
... print f.groups() 
... 
('HIGH',) 
('HIGH',) 
>>> 
+0

あなたの努力に感謝します – Prime

関連する問題