正则表达式

正则的含义

正则表达式就是用来操作字符串的一种逻辑公式

正则表达式的应用场景

数据分析时数据获取的文本筛选
写爬虫代码的时候,网页数据的匹配
写前端代码的时候,用户输入数据的验证
测试人员对请求结果的数据验证

常用的格式校验

邮箱验证
IP地址验证
电话号码验证
身份证号码验证
密码强度验证
网址验证
汉字验证 [\u4e00-\u9fa5]

凡是有一定规律的,批量的数据获取,都可以使用正则表达式来完成

import re
s = '百度的网站是:http://www.baidu.com'
reg = 'http://[w]{3}\.[a-z0-9]*\.com'
re.findall(reg,s)

# --> http://www.baidu.com

#要想匹配中文
re.findall('[\u4e00-\u9fa5]', s)

# -->  ['百', '度', '的', '网', '站', '是']

要注意 \ 是个转义字符

元字符

字符说明
.代表的是换行符以外的任意字符。 换行符是:(不同的操作系统有不同的换行符) \n \r\n
\w匹配字母、数字、下划线、汉字的一个字符
\s匹配任意的空白符
\d匹配数字
^匹配字符串的开始
$匹配字符串的结束

反义代码

字符说明
\W匹配的任意 不是 字母、数字、下划线、汉字 的字符
\S匹配任意 不是 空白符的字符
\D匹配任意 不是 数字的字符

限定符

符号说明
*代表的重复0次或者是多次
+代表的是重复1次或者是多次
?代表的是重复0次或者是1次
{n}重复n次,举例:{3}指的就是重复3次
{n,}重复n次或者更多次数
{n,m}重复n次到m次,所以这里m一般要比n大

分组匹配

s = '我的qq号是42197393 ,我的邮编是10000'
#reg = '\d{5,8}'

reg = '(\d{8}).*(\d{5})'
re.search(reg,s)

#得到一个对象
# -->  <_sre.SRE_Match object; span=(6, 26), match='42197393 ,我的邮编是10000'>

re.search(reg,s).group(1)
# -->  42197393
re.search(reg,s).group(2)
# -->  10000

findall / search/match 区别

  1. findall 是查找所有的
  2. search 匹配第一个
  3. match 匹配开头的

s = 'HelloWorldHelloworld'
reg = 'Hello'
re.match(reg,s)

#-->此次匹配的Hello是开头的

re.search(reg,s)
#-->此次匹配的Hello是第一个hello

贪婪与非贪婪

  • 贪婪的意思是尽可能多的匹配
  • 非贪婪的意思就是尽可能少的匹配
  • 非贪婪操作符是问号:‘符号?’
  • ?号代表的是重复0次或者是1次,再加一个问号,代表的是非贪婪操作,那么最后就只匹配0次
s = 'bbbbbbbaiduuuuuu'
reg = 'baidu??'
re.findall(reg,s)


# -->  baid

分支条件匹配

s = '电话号码有: 010-78472328      0431-9837523     0432-97462743'

# 分支条件匹配原则,前边的条件尽量匹配少的数据,后边的条件匹配多的数据
reg = "0\d{2}-\d{8}|0\d{3}-\d{8}|0\d{3}-\d{7}"
re.findall(reg,s)


#  -->  ['010-78472328', '0431-9837523', '0432-97462743']

零宽断言

  • 匹配"正则表达式reg"前边的位置 (?=reg)
  • 匹配"正则表达式reg"后边的位置 (?<=reg)
  • 匹配后边跟的不是"正则表达式reg"的位置 (?!reg)
  • 匹配前边不是"正则表达式reg"的位置 (?<!reg)
s = 'helloworld'
reg='l{2}o(?=world)'
re.findall(reg,s)

# -->  llo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值