学习笔记,仅供记录。
定义
正则表达式是指专门用于描述或刻画字符串内在规律的表达式
使用场景
1.无法通过切片将字符串的子串返回;
2.借助于replace方法无法完成非固定值或非固定位置值的替换;
3.借助于split方法无法按照多种值实现字符串的分割。
常用函数
#查找
findall(pattern,string,flags=0)
pattern:指定要匹配的正则表达式。
string:指定待处理的字符串。
flags:指定匹配模式
值 | 含义 |
---|---|
re.I | 大小写不敏感 |
re.M | 多行匹配 |
re.S | 指明正则符号.可以匹配任意字符包括换行符\n |
re.X | 允许正则表达式可以写得更加详细,如多行表示、忽略空白字符、加入注释等。 |
#替换
sub(pattern,repl,string,count=0,flags=0)
pattern:同findall函数中的pattern。
repl:指定替换成的新值。
string:同findall函数中的string。
count:用于指定最多替换的次数,默认为全部替换。
flags:同findall函数中的flags。
#分割
split(pattern,string,maxsplit=0,flags=0)
pattern:同findall函数中的pattern。
maxsplit:用于指定最大分割次数,默认为全部分割。
string:同findall函数中的string。
flags:同findall函数中的flags。
常用正则符号及示例
#导入第三方包(Regular Expression正则表达式)
import re
原字符
指代直接存在于字符串内部的字串
#提取出字符串中的Python字串
s1 = '感觉Python很简单,学Python却不易。'
re.findall('Python',s1)
英文状态的句号点 .
指代任意字符(如数字、字母、标点符号、汉字等),但除了换行符\n。
#提取出字符串中的年份
s2 = '2000年至2020年,发生了很多事'
re.findall('....年',s2)
反斜杠 \
表示转义符,用于转换含义的符号
含义 | |
---|---|
\n | 换行 |
\t | Tab制表符 |
\d | 0~9中的任一数字 |
\s | 任意空白(如空格、Tab、换行等) |
\w | 字母、数字和下划线中的任意一种 |
\. | 句号点本身 |
#剔除字符串中的所有空白
s3 = '或许是 不知梦的缘故,\n流离之人 追逐\t幻影。'
re.sub('\s','',s3)
英文状态的中括号 []
指代字符集合,当需要特定字符匹配时,可以选择中括号。
#取出字符串中的手机号
s4 = '用户联系方式:18212345678,用户编号:123456789;'
re.findall('1[356789]\d\d\d\d\d\d\d\d\d',s4)
英文状态的圆括号 ()
指代特定内容的截取(抠)。
#提取出用户的年龄(只要年龄数字)
s5 = 'id:1,name:Tony,age:20;id:2,name:Tom,age:21'
re.findall('age:(\d\d)',s5)
星号 *
表示匹配前一个字符0次及以上
加号 +
表示匹配前一个字符1次及以上。
英文状态的问号 ?
表示匹配前一个字符0次或一次。
#超链接的匹配
URL1 = 'https://www.baidu.com/'
URL2 = 'http://www.gov.cn/'
pattern = 'https?://www\..*?'#注意此处.*?组合,*任意多个字符,?防止盲目匹配
#邮箱地址的匹配
email1 = 'xxx_2020@163.com'
email2 = '12345678@qq.com'
pattern = '[0-9a-zA-Z_\.\-]+@[0-9a-zA-Z_\-]+\.com'
英文状态的大括号 {}
表示匹配前一个字符特定的次数或范围{m}、{m,}、{m,n}、{,n}
#手机号码的匹配
pattern = ''1[356789]\d{9}'
#至少6个长度的密码
pattern = '\w{6,}'
#区号信息
pattern = '0\d{2,3}'