string.replace에 regex를 입력하는 방법
정규식을 선언하는 데 도움이 필요해요입력 내용은 다음과 같습니다.
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
이것도 시도해 봤는데 잘못된 regex 구문을 사용하고 있는 것 같습니다.
line2 = line.replace('<[*> ', '')
line = line2.replace('</[*> ', '')
line2 = line.replace('<[*>', '')
line = line2.replace('</[*>', '')
하드코드는 하고 싶지 않다.replace
1 ~ 99 입니다.
이 테스트된 스니펫을 사용하면 됩니다.
import re
line = re.sub(r"</?\[\d+>", "", line)
편집: 다음은 작동 방식을 설명하는 주석 버전입니다.
line = re.sub(r"""
(?x) # Use free-spacing mode.
< # Match a literal '<'
/? # Optionally match a '/'
\[ # Match a literal '['
\d+ # Match one or more digits
> # Match a literal '>'
""", "", line)
정규식은 재미있어요!하지만 나는 한두 시간 동안 기초 공부를 하는 것을 강력히 추천한다.우선, 어떤 문자가 특별한지 알아야 합니다.탈출이 필요한 메타 문자(즉, 백슬래시가 앞에 배치되어 있고 규칙이 내부와 외부 문자 클래스가 다릅니다.)www.regular-expressions.info에는 훌륭한 온라인 튜토리얼이 있습니다.거기서 보내는 시간은 몇 배나 될 거야.해피 리게이징!
str.replace()
는 고정 교환을 실시합니다.대신 사용하세요.
저는 이렇게 하겠습니다(regex는 댓글로 설명됩니다).
import re
# If you need to use the regex more than once it is suggested to compile it.
pattern = re.compile(r"</{0,}\[\d+>")
# <\/{0,}\[\d+>
#
# Match the character “<” literally «<»
# Match the character “/” literally «\/{0,}»
# Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «{0,}»
# Match the character “[” literally «\[»
# Match a single digit 0..9 «\d+»
# Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
# Match the character “>” literally «>»
subject = """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>"""
result = pattern.sub("", subject)
print(result)
만약 당신이 regex에 대해 더 알고 싶다면 나는 Jan Goyvaerts와 Steven Levithan의 정규 표현 요리책을 읽을 것을 추천한다.
가장 쉬운 방법
import re
txt='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>'
out = re.sub("(<[^>]+>)", '', txt)
print out
문자열 객체의 replace 메서드에서는 정규 표현은 사용할 수 없고 고정 문자열만 사용할 수 있습니다(문서:http://docs.python.org/2/library/stdtypes.html#str.replace) 참조).
사용하셔야 합니다.re
모듈:
import re
newline= re.sub("<\/?\[[0-9]+>", "", line)
정규식을 사용할 필요가 없습니다(샘플 문자열).
>>> s
'this is a paragraph with<[1> in between</[1> and then there are cases ... where the<[99> number ranges from 1-100</[99>. \nand there are many other lines in the txt files\nwith<[3> such tags </[3>\n'
>>> for w in s.split(">"):
... if "<" in w:
... print w.split("<")[0]
...
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
import os, sys, re, glob
pattern = re.compile(r"\<\[\d\>")
replacementStringMatchesPattern = "<[1>"
for infile in glob.glob(os.path.join(os.getcwd(), '*.txt')):
for line in reader:
retline = pattern.sub(replacementStringMatchesPattern, "", line)
sys.stdout.write(retline)
print (retline)
언급URL : https://stackoverflow.com/questions/5658369/how-to-input-a-regex-in-string-replace
'source' 카테고리의 다른 글
MariaDB가 0.0.0에서 리슨하지 않음 (0) | 2022.10.15 |
---|---|
기본 Python으로 brew installed Python을 사용하려면 어떻게 해야 하나요? (0) | 2022.10.15 |
Mac OSX에서 PHP 버전을 쉽게 전환할 수 있는 방법은 무엇입니까? (0) | 2022.10.15 |
Vue watch 어레이에서 이전 값과 새 값이 동일하게 푸시됨 (0) | 2022.10.15 |
MySql INFORMATION_SCHEMA의 DATA_TYPE과 COLUMN_TYPE의 차이점은 무엇입니까?열 (0) | 2022.10.15 |