> re 模块
正则表达式 (或 RE) 是一种小型的, 高度专业化的编程语言,(在 Python 中)它内嵌在 Python 中, 并通过 re 模块实现. 正则表达式模式被编译成一系列的字节码, 然后由用 C 编写的匹配引擎执行.
字符匹配: 普通字符, 元字符
1, 普通字符类似精确匹配:
re.findall()第一个参数是规则, 第二个参数是匹配的字符串.
2, 元字符
元字符:*. ^ $ + ? { } [ ] | ( ) **
1,. 一个点号代表一个任意字符, 多个代表多个. 不包括换行符号(\n , \t , \r)
2,^ 开头符号 (^a : 表示匹配以 a 开头字符串)
3,$ 结尾符号 (a$: 表示匹配以 a 结尾的字符串)
4,* 星号代表匹配 0 到无穷次
5,+ 代表匹配 1 到 无穷次
6,? 代表匹配 0 到 1 次
7,{} {0,1} 这样写代表匹配 0 到 1 次,{2,8}代表匹配 2 到 8 次
8,[] 这个中括号是 字符集 的意思. 例 :k[yc] 表示匹配 ky 或 kc '或'的意思
字符集里面可以应用 3 个符号: - . ^ . \ , 除了这三个符号, 其余符号都代表是字符
加个 - 符号:
加个 ^ 符号,'非' 的意思:
字符集加 \ 跟元字符效果一样,(转义符)
** 元字符之转义符 \
反斜杠后边跟元字符去除特殊功能, 比如.
反斜杠后边跟普通字符实现特殊功能, 比如 \ d
\d 匹配任何十进制数; 它相当于类 [0-9].
\D 匹配任何非数字字符; 它相当于类 [^0-9].
\s 匹配任何空白字符; 它相当于类 [ \t\n\r\f\v].
\S 匹配任何非空白字符; 它相当于类 [^ \t\n\r\f\v].
\w 匹配任何字母数字字符; 它相当于类 [a-zA-Z0-9].
\W 匹配任何非字母数字字符; 它相当于类 [^a-zA-Z0-9]
\b 匹配一个特殊字符边界, 比如空格 ,&,#等
例如使用 \b 就要使用转义符:
匹配字符串'jfdji\ldfdsf' 里的 i\l , 就要多加 3 个 \ 因为 python 解释器转义之后传给 re 模块 ,re 模块再转义:
打印结果是两个 \ 应该是进去两个出来两个.
9,| 代表或的意思. 例如: an|jk : 匹配 an 字符串 或 jk 字符串
10,() 括号内字符串为整体 例如: (abc) 代表匹配 abc 字符串
re 模块函数方法
- re.findall('a','alfgd') #返回所有满足匹配条件的结果, 放在列表里
- re.search() # 函数会在字符串内查找模式匹配, 只到找到第一个匹配然 后返回一个包含匹配信息的对象, 该对象可以通过调用 group()方法得到匹配的字符串, 如果字符串没有匹配, 则 返回 None.
re.search('(?P< 组名 & gt;[a-z+])') , 可以给匹配到的数据设置组名 (?P < 组名> 是 gu 固定格式)
`re.match('a','abc').group()`` 和 search 一样, 不过 match 只从字符串开头匹配 , 如果这个例子不是 a 开头 , 会报错
re.split() 分割字符串 例:
上图中分割步骤为:
按字符串第一个 a 分割, 因为 a 左边为空所以得到 '' 和 cvabjkk , 然后遇到 a 再分割得到 cv 和 bjkk , 然后再从 b 分割 b 左边为空 , 变成' 'jkk , 然后整个加起来: ['', 'cv', '','jkk']
re.sub() 替换方法, 有 4 个参数. 例如 re.sub('\d','abc','adfs5dfs6',1)
上述例子第一个参数为要被替换的字符串, 第二个为替换后的字符串, 第三个为要修改的原始字符串, 第四个为要替换多少次
re.subn('\d','abc','adfs5dfs6') 加个 n 可以统计被替换多少次:
re.compile() 制定匹配规则:
re.finditer() 会把匹配结果变成一个迭代器;
注意
如下图, 应该匹配出 www.baidu.com 以及 www.sina.com , 显示结果没有匹配:
中间家里 括号(分组), 会优先显示出分组里的内容, 要取消有限权限 加上 ?:
来源: http://www.bubuko.com/infodetail-3081942.html