2016-10-13 3 views
0

정규식에서 끔찍한 것이지만 영숫자 문자열의 숫자 부분이 두 개 사이에 있는지 확인하는 방법이 있는지 알고 싶습니다. 값 또는 특정 값보다 작거나 큰 값? 나는 다음과 같은 여러 숫자의 변화가있는 파일에서 검색 할 문자열이있는 경우 예를 들어두 값 사이의 숫자 부분을 가진 파이썬 정규식 영숫자 문자열

:

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

은 가능한 경우에만 여부 '(XXXX 바이트)의'key_string '문자열을 추출하는 것입니다 '부분이 특정 임계 값 사이이거나 특정 값보다 작거나 큰 경우? 예를 들어

내가 찾으려면 모든 나는 인쇄 할 수있는 두 번째 부분은 1200 바이트 이하 예를 들어 'key_string'위 :

key_string (870 bytes) 
key_string (70 bytes) 

을 하나의 정규 표현식에 아래의 문자열을 무시를? :

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를 위해 두 발췌 문장을 모두 지켰다. –

관련 문제