仅当整个模式匹配时,我才想删除一组行(全局)。
模式描述:
第 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:]]
to 的表达式[\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()))