2017-10-07 5 views
-2
str="status 2xx" 
str="status 2xx,3xx" 
str="status 2xx,3xx,4xx" 
str="status blahblahblah" # should not match this 

import re 
if re.match('status\s+(\dxx)',str): 
    print "TRUE" # This matches only first condition. 

テキストのステータスの後にあるすべての番号(2xx or 3xx or 4xx or all)を取得するにはどうすればよいですか? またはこれらのシーケンスを抽出する他の方法はありますか?正規表現でパターンをグループ化するには?

正規表現では([2xx | 3xx | 4xx])のように扱えますか?これは正しくないかもしれませんが、誰かが私をここで助けます。

+0

@Gurman:あなたの例では、第三の場合のみ2パターンを有しています。 1つのグループ内のすべてのシーケンスを抽出できますか? –

+0

downvotingありがとう。しかし、質問が間違っているか、それとも答えることができないのですか? –

+0

あなたの質問はより明確になる可能性があります。 (2xxまたは3xxまたは4xxまたはすべて)を意味しますか? –

答えて

1

1つのオプションは正規表現を使用してCSVデータを抽出し、続いてカンマで文字列を分割して別々の値のリストを取得します。

str = "status 123,456 555 789" 
m = re.search('^status\s+([0-9]+(?:(?:\s+|,)[0-9]+)*)$', str) 

if m: 
    nums = m.group(1) 
    vals = filter(None, re.split("[, ]+", nums)) 
else: 
    vals = list() 

print vals 

出力:

['123', '456', '555', '789'] 

Demo

+0

あなたは正しいですが、非常に簡単な方法です。それを正規表現で扱うことはできますか? *は何でも意味します。シーケンスが存在しない場合はどうなりますか?それはまだ一致しますね。 –

+0

@DieselKumar私の答えは簡単な方法だと思います。あなたの入力データがあなたが上に示したものと非常に異なるものであれば、それを含めておくべきです。あなたのソースデータが何であるかを私はどのように推測できますか? –

+0

私は質問を編集します。 –