正则表达式

概述

世界上信息非常多,而因为关注信息有限。现在需要把关注的信息提取出来,,此时就用一种表达式对数据进行提取。正则表达式就是其中的一种,在python中还有beautifulsoup、xpath等等

原子

原子是正则中最基本的组成单位,每个表达式至少包含一个原子,原子类型有:

  1. 普通字符作为原子
  2. 非打印字符作为原子
  3. 通用字符作为原子
  4. 原子表
import re #导入正则

#普通字符为原子
string = "ilovepython"
pat = "py"
rst = re.search(pat,string)
print(rst)

#非打印字符作为原子
string2 = '''
wo
xi
huan
python
!
'''
pat2 = "\n"
rst2 = re.search(pat2,string2)
print(rst2)

常用的通用字符

\w 字母、数据、下划线
\W 除字母、数字、下划线
\d 十进制数字
\s 除十进制数字
\S 空白字符

原子表

import re
string = "hellopython"
pat = "ll[aoc]p"
rst = re.search(pat,string)
print(rst)

这里的原子表表示在该列表里面匹配任意一个有效字符,然后返回

元字符

. 匹配除了换行符的任意字符
^ 匹配开始位置
$ 匹配结束位置
*代表前边的原子重复出现0次、1次或者多次
?代表前边的原子重复出现0次或者1次
+代表前边的原子重复出现1次或者多次
[n] 恰好出现n次
[n,] 至少出现n次
[n,m] 至少n次,最多m次
| 模式选择符
() 单元模块

模式修正符

所谓的模式修正符,即可以在不改变正则表达式的情况下,通过模式修政符改变正则表达式的含义,从而实现匹配结果的调整等功能。

I 匹配时忽略大小写
M 多行匹配
L 本地化识别匹配
U unicode
S 让.匹配包括换行

string = "Python"
pat = "pyt"
rst = re.search(pat,string,re.I) #忽略大小写
print(rst)

贪婪模式与懒惰模式

贪婪模式的核心就是尽可能多的匹配,而懒惰模式就是尽可能少的匹配。

#贪婪模式
string = "Pythony"
pat = "p.*y"
rst = re.search(pat,string,re.I) #默认贪婪模式,匹配多个结果返回
print(rst)

#懒惰模式
string = "Pythony"
pat = "p.*y"
rst = re.search(pat,string,re.I) #默认贪婪模式,匹配多个结果返回
print(rst)

正则表达式的函数

本身不会实现任何功能,只是进行匹配

re.match()

从开头开始匹配

#匹配不成功
string = "Python"
pat = "oyt"
rst = re.match(pat,string,re.I) #忽略大小写
print(rst)

#成功匹配
string = "Python"
pat = "pyt"
rst = re.match(pat,string,re.I) #忽略大小写
print(rst)

re.search()

从任意地方开始匹配

全局匹配

全局匹配格式
re.compile(正则表达式).findall(数据)

string = "PythonyPypsdddfypdfgfdy"
pat = "p.*?y"
rst = re.compile(pat).findall(string)
print(rst)

常见的实例

匹配网址(.com或者.cn)

string = "(百度首页)"
pat = "[a-zA-Z]+://[^\s]*[.com|.cn]"
rst = re.compile(pat).findall(string)
print(rst)

匹配电话号码

string4 = "as010-27302284dhscn0933-2710228kdwlnckdshidfohwiohios"
pat4 = "\d{4}-\d{7}|\d{3}-\d{8}"
rst4 = re.compile(pat4).findall(string4)
print(rst4)

你可能感兴趣的:(正则表达式)