正则表达式是一个特殊的字符序列, 它能帮助你方便的检查一个字符串是否与某种模式匹配.
Python 自 1.5 版本起增加了 re 模块, 它提供 Perl 风格的正则表达式模式.
re 模块使 Python 语言拥有全部的正则表达式功能.
compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象. 该对象拥有一系列方法用于正则表达式匹配和替换.
re 模块也提供了与这些方法功能完全一致的函数, 这些函数使用一个模式字符串做为它们的第一个参数.
在 Python 的正则表达式中, 有一个参数为 re.S. 它表示 "."(不包含外侧双引号, 下同) 的作用扩展到整个字符串, 包括 "\n". 看如下代码:
- import re
- a = '''asdfsafhellopass:
- 234455
- worldafdsf
- '''b = re.findall('hello(.*?)world',a)
- c = re.findall('hello(.*?)world',a,re.S)
- print 'b is' , b
- print 'c is' , c
运行结果如下:
- b is []
- c is ['pass:\n\t234455\n\t']
正则表达式中,"." 的作用是匹配除 "\n" 以外的任何字符, 也就是说, 它是在一行中进行匹配. 这里的 "行" 是以 "\n" 进行区分的. a 字符串有每行的末尾有一个 "\n", 不过它不可见.
如果不使用 re.S 参数, 则只在每一行内进行匹配, 如果一行没有, 就换下一行重新开始, 不会跨行. 而使用 re.S 参数以后, 正则表达式会将这个字符串作为一个整体, 将 "\n" 当做一个普通的字符加入到这个字符串中, 在整体中进行匹配.
在 re.py 库的介绍中有以下语句:
- "." Matches any character except a newline.
- S DOTALL "." matches any character at all, including the newline.
来源: https://www.jb51.net/article/146384.htm