パターン全体が一致する場合にのみ、行セットを(グローバルに)削除したいと思います。
スキーマの説明:
ライン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()))