정규식을 만들어 텍스트 파일의 특정 텍스트를 필터링하려고합니다. 필터링 할 내용은 다음과 같습니다.파이썬에서 정규 표현식을 만들려면 어떻게해야합니까?
word_*_word.word
예를 들어 매치마다 파이썬 코드를 사용하고 싶습니다. 샘플 결과는 다음과 같습니다.
program1_0.0-1_log.build
program2_0.1-3_log.build
어떻게하면됩니까? ^\w+_.*_\w+\.\w+$
정규식을 만들어 텍스트 파일의 특정 텍스트를 필터링하려고합니다. 필터링 할 내용은 다음과 같습니다.파이썬에서 정규 표현식을 만들려면 어떻게해야합니까?
word_*_word.word
예를 들어 매치마다 파이썬 코드를 사용하고 싶습니다. 샘플 결과는 다음과 같습니다.
program1_0.0-1_log.build
program2_0.1-3_log.build
어떻게하면됩니까? ^\w+_.*_\w+\.\w+$
시도 뭔가 : 당신은 그런 r'\w+_.*_\w+\.\w+'
같은 패턴을 사용하려면 같은
r'[a-zA-Z0-9]+_[^_]+_[a-zA-Z0-9]+\.[a-zA-Z0-9]+'
시도. 당신은 그것을 수입 및 사용하는 데 필요한 provided functions :
import re
if re.match(r'\w+_.*_\w+.\w+', "some_text_abc.x"):
print "yeah."
이스케이프 문자에 대한 특별한 처리없이 그대로 해석 될 수 있도록, r
와 정규 표현식 문자열을 앞에 데 유용합니다. 그렇지 않으면 백 슬래시가 파이썬 인터프리터에 의해 특별히 처리되고 정규 표현식의 일부인 백 슬래시는 이스케이프해야합니다. 이 같은
파이썬의 정규 표현식 모듈이 re
라고하여 도움을
덕분에 많은
이것은 "특이한 것"(OP 예제를 만족하지 않음) 인 "임의의 수의 밑줄"과 일치합니다. –
@Alex : 당신은 절대적으로 옳다. 나는 – sth
@sth, tx를 고쳤다. 또한,'re.match'는 문자열의 _start_에서만 일치한다. (패턴이 함축 된'^'로 시작한 것처럼 감각) 그래서 OP에서 묻는 것처럼 파일에서 "모든 일치"를 얻지 못할 것입니다. –
이 보이는 - 다음, (당신이 "0 개 이상의 완전히 임의의 문자"의미합니까이 *
가정하지 않을 경우 중간에있는 .*
부분을 적절하게 변경해야합니다.) 올바른 패턴 (정확하게 *
;-)에 따라 달라지면 re.compile
을 사용하여 정규 표현식 개체를 가져올 수 있으며 전체 문자열을 인수로 사용하여 RE 개체의 .findall
메서드를 사용할 수 있습니다. 이 패턴과 일치하는 모든 중복되지 않는 부분 문자열의 목록을 가져옵니다 (예 : .finditer
같은 부분 문자열을 한 번에 가져 와서 루프를 반복하려는 경우).
여기 왜 정규식이 필요한지 이해가 안됩니다. 당신이 원하는 문자열이 ".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 _"
다중 행 루프가 아닌 코드의 1 행으로 항목을 찾으려면 정규 표현식을 사용하는 것을 선호 할 수 있습니다. –
절대적으로 필요한 경우를 제외하고 파이썬에서 정규 표현식을 사용하는 경우는 거의 없습니다. 파이썬의 내부 문자열 메소드를 사용하는 것이 더 빠릅니다. – ghostdog74
을 더 검사를 수행하려는 경우, 당신은 영업 이익의 욕망으로, 그것은 단지 전체 라인을 일치 있도록'재 지정 기억 경우 (패턴을 고정하여, "모든 경기"를받지 않습니다 .MULTILINE' - 그렇지 않으면 전체 파일 만,'re.DOTALL'을 지정하지 않으면 개행 문자가없는 경우에만 ;-). –