본문 바로가기
Python/Python FAQ

Python 문자열.replace에 정규식을 입력하는 방법은 무엇인가요?, How to input a regex in string.replace?

by 베타코드 2023. 10. 24.
반응형

질문


정규식 선언에 도움이 필요합니다. 입력은 다음과 같습니다:

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에 훌륭한 온라인 튜토리얼이 있습니다. 거기에서 시간을 투자하면 여러 번의 보상을 받을 수 있습니다. 행운을 빕니다!

반응형

댓글