正则表达式

正则表达式的常用匹配规则

1、匹配某个字符串

text = 'hellohello'
ret = re.match('he', text)
print(ret)
print(ret.group())

2、点(.)匹配任意的字符

text = 'hellohello'
ret = re.match('.', text)
print(ret.group())

3、但点号不能匹配换行符 \n

text = '\na'
ret = re.match('.', text)
print(ret.group())

4、\d 匹配任意的数字

text = '121311'
ret = re.match('\d', text)
print(ret.group())

5、\D 匹配任意的非数字

text = '+111'
ret = re.match('\D', text)
print(ret.group())

6、 \s 匹配空白字符串,\n \t \r

text = '\r1\n'
ret = re.match('\s', text)
print(ret.group())

7、 \w 匹配小写的a~z, A~Z, 数字和下划线

text = '__'
ret = re.match('\w', text)
print(ret.group())

8、 \W 和 \w匹配的相反

text = '----'
ret = re.match('\W', text)
print(ret.group())

9、[]只要满足中括号中的字符,就可以匹配.只要满足中括号中的一项既可
以匹配

text = '11aaa11'
ret = re.match('[1]', text)
print(ret.group())

text = '0371-119111'
# + 代表可以匹配一个或多个满足前边条件的
ret = re.match('[\d\-]+', text)
print(ret.group())

10、 中括号的形式代替\d

text = '11aaa11'
ret = re.match('[0-9]', text)
print(ret.group())

# \D == [^0-9]
# \w == [0-9a-zA-Z_]
# \W == [^0-9a-zA-Z_]

匹配多个字符串

1、* 可以匹配 0或者任意多个字符

text = '1aaaaa11'
ret = re.match('\d*', text)
print(ret.group())
#如果这里text = ‘aaa’
那么匹配0个,但不会报错

2、+ :匹配一个或者跟多个字符

text = 'aaaa11'
ret = re.match('\w+', text)
print(ret.group())
结果:aaaa11

3、?:匹配一个或者0个

text = 'aaaa11'
ret = re.match('\w*', text)
print(ret.group())

4、 {m}: 匹配m个字符

text = 'aaaa11'
ret = re.match('\w{2}', text)
print(ret.group())
结果: aa

5、{m,n}:匹配m到n个,如果有n个满足,就匹配n个。
若匹配地小于m,则会报错

text = 'a
aaa11'
ret = re.match('\w{1,3}', text)
print(ret.group())

正则表达式的常用匹配规则

1、^(脱字号):表示以…开始

text = 'hello'
ret = re.search('^h', text)
print(ret.group())

如果^在 中括号中,则表示取反操作

2、$ 代表以…结尾

text = 'wwwxxx@163.com'
ret = re.match('\w+@163.com$', text)
print(ret.group())

3、| 匹配多个表达式或者字符串


text = 'https://wwwxxx@163.com'
ret = re.match('(https|http)://\w+@163.com$', text)
print(ret.group())

4、贪婪模式和非贪婪模式
贪婪模式:匹配尽量多的字符 如 +

text = '013212313123123'
ret = re.match('\d+', text)
print(ret.group())
text = '<h1>测试</h1>'
ret = re.match('<.+>', text)
print(ret.group())
结果:<h1>测试</h1>

非贪婪模式:+?

text = '013212313123123'
ret = re.match('\d+?', text)
print(ret.group())
text = '<h1>测试</h1>'
ret = re.match('<.+?>', text)
print(ret.group())
结果

正则表达式的一些使用案例

1、验证手机号

text = '18511237719'
ret = re.match('1[34578]\d{9}', text)
print(ret.group())

2、验证邮箱

text = 'hywav11_@xx.com'
ret = re.match('\w+@[a-z0-9]+\.[a-z]{2,3}', text)
print(ret.group())

3、验证url

text = 'https://mp.csdn.net/mdeditor/103151639#'
ret = re.match('(http|https|ftp)://[^\s]+', text)
print(ret.group())

4、验证身份证

text = '11012345678965432x'
ret = re.match('\d{17}[\dxX]', text)
print(ret.group()

re模块常用函数

1、find_all

text = "apple's price $99,orange's price is $10"
ret = re.findall('\$\d+', text)
print(ret)
结果:['$99', '$10']

2、sub

text = "apple's price $99,orange's price is $10"
ret = re.sub('\$\d+', '0', text)
print(ret)
结果:apple's price 0,orange's price is 0

3、split

text = 'hello world ni hao'
ret = re.split(' ', text)
print(ret)
结果:['hello', 'world', 'ni', 'hao'] 

4、compile
对于一些倡常用的正则表达式,可以使用compile进行编译,后期再使用时可以直接拿过来使用,使用效率会更高。而且compile可以指定flag=re.VERBOSE,再写正则表达式时候可以做好注释

text = 'the number is 20.52'
# r = re.compile('\d+\.?\d*')
r = re.compile(r"""
    \d+ #小数点前边的数字
    \.? #小数点本身
    \d* #小数点后边的数字
""", re.VERBOSE)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值