正则表达式

p.s. 字符串前加r,就不用考虑转义问题了
s=r’abc\001’

正则表达式是用来匹配字符串(给字符串定义一个规则,符合规则算作匹配,否则字符串不合法)

如何用字符来描述字符

因为正则表达式也是字符串表示的,so首先要了解字符是如何描述字符的。

直接给出字符\d\w\s.\特殊符号
精确匹配匹配一个数字匹配一个数字或字母匹配一个空格匹配任意字符匹配特殊符号
*+{n}{n,m}
表示任意个字符(包括0个)表示至少一个字符表示0个或1个字符表示n个字符表示n-m个字符
  • \d{3}\s+\d{3,8}#有三个数字,至少一个空格,三到八个数字组成的字符串

为了更精确匹配,还可以用[字符类型范围]字符个数范围表示

  • [0-9a-zA-Z\_]{6,10}可以匹配6-10个由数字,大小写字母和下划线组成的字符串
  • [a-zA-Z][0-9a-zA-Z\_]{5-7}可以匹配由字母开头,后面最多5-7个由数字、大小写字母和下划线组成的字符串(总长度为6-8)

进一步

A|B^$
可以匹配字符A或B表示开头,用来限定字符的开头表示结尾,用来限定字符的结尾

re模块

python提供re模块,包含所有正则表达式的功能

r判断正则表达式是否匹配

【格式】

import re
re.match(r'正则表达式','测试字符串')

match()判断是否匹配

  • 匹配成果,返回一个match对象
  • 匹配不成功,返回None

r’正则表达式’字符串前加r,就不用考虑转义问题了

【例子】

import re
test=input('请输入字符串')
if re.match(r'^\d{3}\-\d{3,8}$', test):
	print('OK')
else:
	print('failed')

切分字符串

'ab c'.split(' ')#字符串split无法识别连续的空格
re.split(r'\s+','ab c')#可以很好切分
如果要对多种符号进行切分:re.split(r'[\s\,]+','a,b, c d')

str.spllit(符号,分割为n份)#切分字符串

分组

如果在正则表达式中定义了组,可以用group()方法提取子串
【例子】

import re
m=re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
m.group(0) #返回'010-12345'
m.group(1) #返回'010'
m.group(2) #返回'12345'
  • group()
    • group(0)表示原始字符串
    • group(i)表示第i个子串
    • groups()表示全部子串
  • 定义组:在正则表达式中用( )将一部分内容括起来作为一组

贪婪匹配

正则匹配默认是贪婪匹配(匹配尽可能多的字符)
但是这有时候也会带来不便
【例子】

import re
re.match(r'^(\d+)(0*)$', '102300').groups()

因为\d+采用贪婪匹配,把后面的00全部匹配了
要使\d+采用非贪婪匹配,才能把后面的0匹配出来;\d+?就是非贪婪匹配

编译

为了提高使用效率,可以对正则表达式进行编译
【例子】

import re
#编译
re_telephone=re.compile(r'^(/d{3})-(\d{3,8})$')
#使用
re_telephone.match('010-12345').groups()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值