정규식 선언에 도움이 필요합니다. 내 입력은 다음과 같습니다.
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('</[*>', '')
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)
정규식은 재미있다! 그러나 기초를 공부하는 데 1 ~ 2 시간을 보내는 것이 좋습니다. 우선, 어떤 캐릭터가 특별한 지 배워야합니다. “메타 캐릭터 “ 이스케이프 처리해야합니다 (즉, 백 슬래시가 앞에 배치되고 규칙은 내부와 외부의 클래스가 다릅니다). www. .regular-expressions.info . 당신이 그곳에서 보내는 시간은 여러 번에 걸쳐 스스로를 지불 할 것입니다. 행복한 정규식!
답변
str.replace()
고정 교체를 수행합니다. re.sub()
대신 사용하십시오 .
답변
나는 이것을 좋아할 것이다.
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)
정규식에 대한 자세한 내용을 보려면 Jan Goyvaerts와 Steven Levithan의 Regular Expressions Cookbook 을 읽는 것이 좋습니다.
답변
가장 쉬운 방법
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)