2016-10-13 8 views
0

正規表現ではひどいですが、アルファベット文字列の数値部分が2つの間にあるかどうかをチェックするメソッドがあるかどうかを知りたいと思います値、またはそれ以下/大きい私は以下のように複数の数値のバリエーションを持つファイルで検索する文字列がある場合たとえばPythonの正規表現2つの値の間の数値部分を持つ文字列

key_string (870 bytes) 
key_string (1500 bytes) 
key_string (70 bytes) 

は、それが可能かどうかだけ「(XXXXバイト)に「key_string」という文字列を抽出することです'の部分は特定のしきい値の間にあるか、またはある値よりも小さいか大きいかのどちらかですか?例えば

私は2番目の部分は1200バイト以下で、上記のすべての「key_string」例を検索する場合、私はプリントアウトすることができます

key_string (870 bytes) 
key_string (70 bytes) 

と1つの正規表現では、以下の文字列を無視しますか? :

key_string (1500 bytes) 
+1

それは可能ですが、推奨されません。数値データがある場合は、それを抽出し、intにキャストしてしきい値と比較してから、すべての人生をより簡単にするための適切な処置を講じます。 –

答えて

1

re.findall()を使ってregexと一緒に検索することができます。以下のように正規表現の

説明:

key_string\s+\((\d+)\s+bytes\) 

Regular expression visualization

Debuggex Demo

コード:

import re 

with open('result.txt') as fh: 
    for l in fh: 
     a = re.findall(r"key_string\s+\((\d+)\s+bytes\)",l.strip()) 
     if len(a) > 0 and int(a[0]) < 1200: 
      print (l) 

出力:WiktorStribiżew @により示唆されるように

C:\Users\dinesh_pundkar\Desktop>python c.py 
key_string (870 bytes) 

key_string (70 bytes) 

C:\Users\dinesh_pundkar\Desktop> 

コード2:

import re 

pattern = r'key_string\s+\((\d+)\s+bytes\)' 
regex = re.compile(pattern, re.IGNORECASE) 
with open('result.txt') as fh: 
    for match in regex.finditer(fh.read()): 
     if int(match.group(1)) < 1200: 
      print((match.group())) 
+0

これには 're.finditer'を使います。マッチ全体と取り込まれた部分文字列にアクセスする必要があります。 –

+0

@WiktorStribiżew - 確認中... –

+0

@WiktorStribiżew - コードを追加しました。チェックしてください。私はOPのための両方のスニペットを保管しています。 –

関連する問題