单字符匹配
匹配某个字符串:match()只能够匹配一个对象
1 | # 格式:match(表达式, 匹配对象) |
点(.):匹配任意的某个字符(
无法匹配换行符
)\d:匹配任意的某个数字(
数字以外的内容均不匹配
)\D:除数字以外均可匹配(
\D和\d互补
)\s:匹配空白字符(
\n、\t、\r、空格都表示空白字符
)\w:匹配小写的a-z,大写的A-Z,数字和下划线
\W:匹配除小写\w之外的所有字符(
\w和\W互补
)[]:组合的方式,只要在中括号内的内容均可匹配(
多个匹配内容是,取"或",只要匹配对象中含有一个内容就匹配
)
多字符匹配
- 星号(*):匹配零个或多个字符
1 | text1 = '123456789' |
加号(+):匹配一个或多个字符(
至少有一个
)问号(?):匹配零个或一个字符
{m}:匹配指定个数m个
1 | text = '12345-6789' |
- {m,n}:匹配m到n个字符(
默认匹配最多次(n次)
)
匹配规则的替代方案
\d —> [0-9]
\D —> [^0-9]
中括号里面加^表示取反,在外面表示其后跟着的字符作为开头
\w —> [0-9a-zA-Z_]
\W —> [^0-9a-zA-Z_]
[\d\D]、[\w\W] —> 匹配所有的字符
特殊匹配
1 | result1 = re.match('[.]+', text) # 仅仅匹配字符".",没有其他含义,也可以加转义来匹配:"\." |
匹配手机号码
- re.match(‘1[3-9][0-9]{9}’, text)
第一位固定为1;第二位范围:3-9;第三位范围:0-9,匹配九次
- re.match(‘1[3-9][0-9]{9}’, text)
验证邮箱
- re.match(‘[0-9a-zA-Z]]+@[0-9a-z]+[.]com’, text)
验证身份证号
- re.match(‘[0-9]{17}[0-9xX]’, text)
最后一位有可能是大小写的字母x或者数字
- re.match(‘[0-9]{17}[0-9xX]’, text)
特殊匹配进阶
1 | text1 = 'pythonpy' |
^:表示以其后的字符开头,不在中括号内
$:表示以其后的字符结尾
|:匹配多个表达式或者字符串
- 第一种
1
2
3text = "https://www.baidu.com"
result = re.search('[http|https|ftp|file]+', text)
print(result.group()) # 输出:https- 第二种
1
2
3text = "https://www.baidu.com"
result = re.search('(http|https|ftp|file)', text)
print(result.group()) # 输出:http,因为只要匹配到就算;可以理解成有优先级的概念,所以先匹配到了http
贪婪模式与非贪婪模式
默认:贪婪模式
- 贪婪模式:尽可能多的去匹配内容
- 非贪婪模式:尽可能少的去匹配内容
添加"?"
group函数
前面的内容都是在做”匹配”,并未执行”提取”
==可以在group(n)中指定序号,表明提取指定的内容(以空格定位:”\s”)==
正则表达式的常用函数
re.match():从左往右进行匹配
开头不满足即失败
re.search():在整个字符串中查找,返回第一个被找到的字符串
只返回第一个
re.findall():在整个字符串中查找所有满足条件的字符串
返回结果为列表,输出不需要group函数,可以直接print
re.sub():替换字符串
匹配出来的字符串进行替换
1
re.sub('\s(\w+@[0-9a-z]+\.com)', 'wrong', text)
re.split():主要用来分隔字符串
返回一个列表
1
2
3text = 'I am xxxxx'
re.split(' ', text) # 匹配字符串以空格分隔
re.split('[^\w]', text)re.compile():对正则表达式进行编译
好处:可以添加注释,防止自己忘了正则的含义
1 | text = r'<a target="blank" href= "pos ition_detail.php?id=33824& keywords=python&tid=87& id=2218">python开发工程师</a>' |