반응형
질문
정규식 선언에 도움이 필요합니다. 입력은 다음과 같습니다:
this is a paragraph with<[1> in between</[1> and then there are cases ... where the<[99> number ranges from 1-100</[99>.
and there are many other lines in the txt files
with<[3> such tags </[3>
필요한 출력은 다음과 같습니다:
this is a paragraph with in between and then there are cases ... where the number ranges from 1-100.
and there are many other lines in the txt files
with such tags
다음을 시도해 보았습니다:
#!/usr/bin/python
import os, sys, re, glob
for infile in glob.glob(os.path.join(os.getcwd(), '*.txt')):
for line in reader:
line2 = line.replace('<[1> ', '')
line = line2.replace('</[1> ', '')
line2 = line.replace('<[1>', '')
line = line2.replace('</[1>', '')
print line
다음도 시도해 보았지만 (잘못된 정규식 구문을 사용하는 것 같습니다):
line2 = line.replace('<[*> ', '')
line = line2.replace('</[*> ', '')
line2 = line.replace('<[*>', '')
line = line2.replace('</[*>', '')
1에서 99까지 replace
를 하드코딩하고 싶지 않습니다.
답변
다음은 테스트된 코드 조각입니다:
import re
line = re.sub(r"</?\[\d+>", "", line)
편집: 여기에는 작동 방식을 설명하는 주석이 포함된 버전이 있습니다:
line = re.sub(r"""
(?x) # 자유 공간 모드 사용
< # 리터럴 '<'와 일치
/? # '/'를 선택적으로 일치
\[ # 리터럴 '['와 일치
\d+ # 하나 이상의 숫자와 일치
> # 리터럴 '>'와 일치
""", "", line)
정규 표현식은 재미있습니다! 하지만 기초를 공부하는 데 한두 시간을 투자하는 것을 강력히 권장합니다. 먼저 특수한 문자인 "메타 문자"를 배워야 합니다. 이 메타 문자는 이스케이프 처리해야 하며 (즉, 앞에 백슬래시를 넣어야 함 - 문자 클래스 내부와 외부의 규칙은 다릅니다.) www.regular-expressions.info에 훌륭한 온라인 튜토리얼이 있습니다. 거기에서 시간을 투자하면 여러 번의 보상을 받을 수 있습니다. 행운을 빕니다!
반응형
댓글