正则表达式(Regular expression)可用来检查文本中是否包含指定模式的字符串,通常是按行来处理(POSIX标准),因为.
操作符通常不匹配换行符,如果要匹配多行怎么处理呢?本文介绍正则表达式跨行匹配实现方法。
1. sed 命令删除多行
测试文档test.txt内容如下:1
2
3
4start
test1
test2
end
删除 start
和 end
之间的内容1
2
3
4
5# 包括`start` 和 `end`
sed -i '/start/,/end/d' test.txt
# 不包括`start` 和 `end`
sed -i '/start/,/end/{{//!d;};}' test.txt
2. Python正则表达式匹配多行
Python中匹配多行方法如下:
① re.DOTALL
或者 re.S
参数
1 | import re |
执行结果:
1 | ['start\ntest1\ntest2\nend'] |
② 表达式 (.|\n|\r)*
1 | import re |
执行结果:
1 | [('\ntest1\ntest2\n', '\n')] |
③ 表达式 [\s\S]*
1 | import re |
执行结果:
1 | ['\ntest1\ntest2\n'] |
④ 表达式 (?s)
1 | import re |
执行结果:
1 | ['\ntest1\ntest2\n'] |
参考:
本文标题:正则表达式实现跨行匹配
文章作者:hiyo
文章链接:https://hiyongz.github.io/posts/linux-regular-expression-for-multiple-lines/
许可协议:本博客文章除特别声明外,均采用CC BY-NC-ND 4.0 许可协议。转载请保留原文链接及作者。