2017-09-15 14 views
-1

할 수 파이썬에서 좋은 방법이 있나요 : 다시 튜플과 일치하는 부분을 얻을 :정규식과 일치하는 부분 문자열을 추출하는 우아한 방법?

  • 확인이 문자열이 정규 표현식
  • 예라면 세트를 일치가.

그래서 기본적으로 내가 (예 : 튜플) 간단한 방법은 간단한 파서/스캐너 문법을 입력하고 단순히 특정 구조의 모든 일치를 추출 할 그래서 우리는 문자열 국가 코드로 인코딩 한 가정

, 도시 이름 및 색인. 우리는 이것을 추출하고 싶습니다 :

input = "123-NEWYORK-[2]" 
grammar = "<country,[0-9]+>-<city,[A-Z]*>-[<index,[0-9]*>" 
res = HOW_TO_DO_THIS(input,grammar) 
if res is None: 
    print("Does not match") 
else 
    (countrycode,city,index) = res 
+2

체크 아웃이 하나의 친구 https://stackoverflow.com/questions/46239445/get-string-that-was-matched-by-regex/46239491 더 쉽게 (그리고 더 일반적인)입니다 # 46239491 – babygame0ver

+0

당신은're' 모듈을 사용할 필요가 있습니다; 그것이 의미하는 질문은 기본적으로 모듈에 대한 자습서를 요구하기 때문에 너무 광범위합니다. – chepner

답변

2

에 따라이 단순한 텍스트 검색을위한 그러나 당신은 확장 할 수

import re 
input = "123-NEWYORK-[2]" 
grammar = r"(?P<country>[0-9]+)-(?P<city>[A-Z]*)-(?P<index>\[[0-9]*\])" 
res = re.findall(grammar, input) 
if not res: 
    print("Does not match") 
else: 
    (countrycode,city,index) = res[0] 
    print(countrycode) 

수정 :

  • 올바른 정규식은 (?P[0-9]+)-(?P[A-Z])-(?P[[0-9]])
  • 입니다. 파이썬의 regex 모듈 구문은 re.findall(patter, input_string)입니다. 반대가 아닙니다.
  • if not xif x is None
0

이 코드를 확인하십시오. 정규식이 수정 된 점에 유의 시나리오 당신이 할 수있는 python3와

import re 
f=open('sample.txt',"w") 
f.write("<p class = m>babygameover</p>") 
f.close() 
f=open('sample.txt','r') 
string = "<p class = m>(.+?)</p>" # regular expression 
pattern = re.compile(string) # compiling 
text = f.read() 
search = re.findall(pattern,text) # searching 
print search 
+0

이것은 내가 찾고있는 것이 아닙니다. findall은 1 개의 정규 표현식을 모두 찾습니다. 난 더 큰 정규 표현식에 따라 배치 된 하위 정규 표현식을 모두 원한다. (따라서 위의 경우 - []. – robert

+0

@robert 당신은 한 줄씩 데이터를 읽고 그것을 반복 할 수있다. 너의 물건 – babygame0ver