전체 패턴이 일치하는 경우에만 행 집합을 (전역적으로) 삭제하고 싶습니다.
스키마 설명:
라인 1:^[#]+ .*
2호선:^[[:space:]]*$
3행:^-[[:space:]]*$
4행:^[[:space:]]*$
5행:^[#]+ .*$|^[-]+[[:space:]]*$
노트:
- 3행 뒤에 공백이 있을 수 있습니다.
-
- Line2 및 Line4에는 공백 문자가 있을 수 있거나 비어 있어야 합니다.
- 5번째 줄, 일치
^[#]+ .*$
또는^[-]+[[:space:]]*$
Line5
패턴 설명의 마지막 줄인 패턴의 마지막 줄을 삭제하고 싶지 않습니다 .
예:
# Body
- Inside Body
# Summary
-
# Bibliography
- Read this book
예상 출력:
# Body
- Inside Body
# Bibliography
- Read this book
노트: 제공된 솔루션이 작동합니다. 다음과 같이 더 명확하게 작성할 수 있습니까?
e = '(^|\n)[#]+ .*\
\n[\t ]*\
\n-[\t ]*\
\n[\t ]*\
\n([#]+ .*|[-]+[\t ]*)\n'
또한 여러 줄 패턴이 여러 번 발생하는 경우 제공된 솔루션을 어떻게 해결할 수 있습니까?
답변1
Python 솔루션은 Python2 또는 3에서 작동해야 합니다. stdin에서 읽고 stdout으로 출력합니다. 내가 한 유일한 일은 [[:space:]]
의 표현을 로 바꾸는 것이었습니다 [\t ]
.
#!/usr/bin/python3
import sys
import re
e='(^|\n)[#]+ .*\n[\t ]*\n-[\t ]*\n[\t ]*\n([#]+ .*|[-]+[\t ]*)\n'
print(re.sub(e, '\\1\\2\n', sys.stdin.read()))