2013-10-25 2 views
2

특정 패턴과 일치하는 한 줄을 추출하려는 줄이있는 텍스트 파일이 있습니다. 정규 표현식을 사용하여 해당 행을 검색 한 후 반환하여 나중에 사용할 수 있습니까? 그것은 당신에게 일치하는 라인의 목록을 반환합니다 당신이반환 문자열이 일치하는 정규 표현식

print [line for line in file if re.match(targetregex, line)] 

처럼, 지능형리스트를 사용할 수 있습니다

print re.matchingline(targetregex,file.read()) 
+0

일치하는 항목이 없을 경우 인쇄 할 것으로 예상되는 내용은 무엇입니까? – thefourtheye

+0

나는 그것을 잘못 쓰셨습니까? 나는 한 번 봐. 그러나 일치하는 것이 있으면 그것을 반환하거나 프린트하고 싶습니다. 죄송 합니다만 실수를 보지 않습니다. 도와주세요. ! = 없음은 일치하는 것이 있으면 인쇄 될 것입니다, 그렇습니까? – aldorado

+0

정말로 'None'과 비교하고 싶다면'! = None' 대신'is not None'을 사용해야합니다 (많은 경우 이것을 포함하여, 당신은 non-none falsy 값을 가지지 않을 것입니다 어쨌든 수표를 건너 뛰고 표현의 부울 값을 직접 사용하십시오.) – geoffspear

답변

2

:

for lines in file: 
    if re.match(targetregex,line)!=None: 
     print line 

뭔가처럼보다 더 우아한 방법이 있나요 정규식.

+0

이제 알겠습니다. ! = None은 단지 필요하지 않습니다. – aldorado

+0

@aldorado 예 : – thefourtheye

+0

하지만 조건이 작동하면 어떻게되는지에 대해 알려주겠습니다.이 질문은 별도의 질문으로도 요청할 수 있습니다. re.match (targetregex, line)는 True를 반환하지 않습니다. re.match ... if 조건의 결과를 입력하면 왜됩니까? 나는 if (condition == True)가되어야한다고 생각했다. 결과 : – aldorado

1

작업을 수행하기 위해 항상 고유 한 기능을 작성할 수 있습니다. 당신이 배열을 원하는 경우

def matchingline(regex, file): 
    compiled = re.compile(regex) 
    for line in file: 
     if compiled.match(line): 
      return line 

print(matchingline(targetregex, file)) 
+1

첫 번째 질문 만 원하는지 잘 모르겠습니다. 따라서 발전기가 더 나은 선택 일 수 있습니다. 'return' 대신'yield' 만 ... – glglgl

-1

numpy.fromregex 충분히 우아한 것 같다.

+0

왜 아래 표를 얻었습니까? –

관련 문제