2009-12-12 4 views
0

정규식을 만들어 텍스트 파일의 특정 텍스트를 필터링하려고합니다. 필터링 할 내용은 다음과 같습니다.파이썬에서 정규 표현식을 만들려면 어떻게해야합니까?

word_*_word.word 

예를 들어 매치마다 파이썬 코드를 사용하고 싶습니다. 샘플 결과는 다음과 같습니다.

program1_0.0-1_log.build 
program2_0.1-3_log.build 

어떻게하면됩니까? ^\w+_.*_\w+\.\w+$

답변

3

시도 뭔가 : 당신은 그런 r'\w+_.*_\w+\.\w+' 같은 패턴을 사용하려면 같은

r'[a-zA-Z0-9]+_[^_]+_[a-zA-Z0-9]+\.[a-zA-Z0-9]+' 
0

시도. 당신은 그것을 수입 및 사용하는 데 필요한 provided functions :

import re 
if re.match(r'\w+_.*_\w+.\w+', "some_text_abc.x"): 
    print "yeah." 

이스케이프 문자에 대한 특별한 처리없이 그대로 해석 될 수 있도록, r와 정규 표현식 문자열을 앞에 데 유용합니다. 그렇지 않으면 백 슬래시가 파이썬 인터프리터에 의해 특별히 처리되고 정규 표현식의 일부인 백 슬래시는 이스케이프해야합니다. 이 같은

+0

을 더 검사를 수행하려는 경우, 당신은 영업 이익의 욕망으로, 그것은 단지 전체 라인을 일치 있도록'재 지정 기억 경우 (패턴을 고정하여, "모든 경기"를받지 않습니다 .MULTILINE' - 그렇지 않으면 전체 파일 만,'re.DOTALL'을 지정하지 않으면 개행 문자가없는 경우에만 ;-). –

1

파이썬의 정규 표현식 모듈이 re라고하여 도움을

덕분에 많은

+0

이것은 "특이한 것"(OP 예제를 만족하지 않음) 인 "임의의 수의 밑줄"과 일치합니다. –

+0

@Alex : 당신은 절대적으로 옳다. 나는 – sth

+0

@sth, tx를 고쳤다. 또한,'re.match'는 문자열의 _start_에서만 일치한다. (패턴이 함축 된'^'로 시작한 것처럼 감각) 그래서 OP에서 묻는 것처럼 파일에서 "모든 일치"를 얻지 못할 것입니다. –

2

이 보이는 - 다음, (당신이 "0 개 이상의 완전히 임의의 문자"의미합니까이 * 가정하지 않을 경우 중간에있는 .* 부분을 적절하게 변경해야합니다.) 올바른 패턴 (정확하게 * ;-)에 따라 달라지면 re.compile을 사용하여 정규 표현식 개체를 가져올 수 있으며 전체 문자열을 인수로 사용하여 RE 개체의 .findall 메서드를 사용할 수 있습니다. 이 패턴과 일치하는 모든 중복되지 않는 부분 문자열의 목록을 가져옵니다 (예 : .finditer 같은 부분 문자열을 한 번에 가져 와서 루프를 반복하려는 경우).

0

여기 왜 정규식이 필요한지 이해가 안됩니다. 당신이 원하는 문자열이 ".build"로 끝나는 경우, 예를

s="blah blah program1_0.0-1_log.build blah blah"  
for item in s.split(): 
    if item.endswith(".build"): 
     print item 

이 작업을 수행 할 수 있으며 바로 그거야. 그런 다음,

for item in s.split(): 
    if item.endswith(".build"): 
     s = item.split("_") 
     if len(s) != 3: 
      print "not enough _" 
+0

다중 행 루프가 아닌 코드의 1 행으로 항목을 찾으려면 정규 표현식을 사용하는 것을 선호 할 수 있습니다. –

+0

절대적으로 필요한 경우를 제외하고 파이썬에서 정규 표현식을 사용하는 경우는 거의 없습니다. 파이썬의 내부 문자열 메소드를 사용하는 것이 더 빠릅니다. – ghostdog74

관련 문제