python3进阶

python3正则表达式

正则表达式是一个特殊的字符,它能帮助你方便的检查一个字符串是否与某种模式匹配
re模块使python语言拥有全部的正则表达式功能
compile()函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。
该对象拥有一系列方法用于正则表达式匹配和替换
re模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串作为它们的第一个参数。

import re

re.match(pattern,string,flag=0)

pattern : 匹配的正则表达式
string : 要匹配的字符串
flags : 标志位,用于控制正则表达式的匹配方式,如是否区分大小写,多行匹配等等

匹配成功re.match方法返回一个匹配的对象,否则返回None
可以使用group(num)或者groups()匹配对象函数来获取匹配表达式
group(num=0) : 匹配的整个表达式的字符串,group()可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应的元组
groups() 返回一个包含所有小组字符串的元组,从1到所含的小组号

import re
print(re.match('www', 'www.runoob.com').span())  # 在起始位置匹配
print(re.match('com', 'www.runoob.com'))         # 不在起始位置匹配
'''
(0, 3)
None  #"com"与"www"不匹配
'''
import re
print(re.match('www', 'www.runoob.com').span())  # 在起始位置匹配
print(re.match('.*com', 'www.runoob.com').span())         # 不在起始位置匹配

'''
(0, 3)
(0, 14) # .* : www.runoob.
'''

正则表达式修饰符-可选标志

re.l 使匹配对大小写不敏感
re.L 做本地化识别匹配
re.M 多行匹配,影响^和$
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w,\W,\b,\B
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写的更易于理解

import re

line = "Cats are smarter than dogs"
# .* 表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符
# (.*?) 表示"非贪婪"模式,只保存第一个匹配到的子串
matchObj = re.match(r'(.*) are (.*?) .*', line, re.M | re.I)
'''
(.*) : Cats
are : are
(.*?) : smater
.* : than dogs 
'''

print("matchObj.group() : ", matchObj.group())
print("matchObj.group(1) : ", matchObj.group(1))
print("matchObj.group(2) : ", matchObj.group(2))
print("matchObj.groups() : ", matchObj.groups())

'''
matchObj.group() :  Cats are smarter than dogs
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter
matchObj.groups() :  ('Cats', 'smarter')
'''
import re

line = "Cats are smarter than dogs"
# .* 表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符
# (.*?) 表示"非贪婪"模式,只保存第一个匹配到的子串
matchObj = re.match(r'(.*) are (.*?) ', line, re.M | re.I)
'''
(.*) : Cats
are : are
(.*?) : smater
'''

print("matchObj.group() : ", matchObj.group())   
print("matchObj.group(1) : ", matchObj.group(1))
print("matchObj.group(2) : ", matchObj.group(2))
print("matchObj.groups() : ", matchObj.groups())

'''
matchObj.group() :  Cats are smarter 
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter
matchObj.groups() :  ('Cats', 'smarter')
'''

re.search()

re.search(pattern,string,flags=0)扫描整个字符串并返回第一个成功的匹配

import re

print(re.search('www', 'www.runoob.com').span())  # 在起始位置匹配
print(re.search('com', 'www.runoob.com').span())  # 不在起始位置匹配

'''
(0, 3)
(11, 14)
'''
import re

line = "Cats are smarter than dogs"

searchObj = re.search(r'(.*) are (.*?) .*', line, re.M | re.I)

if searchObj:
    print("searchObj.group() : ", searchObj.group())
    print("searchObj.group(1) : ", searchObj.group(1))
    print("searchObj.group(2) : ", searchObj.group(2))
    print("searchObj.groups() : ", searchObj.groups())
else:
    print("Nothing found!!")

'''
searchObj.group() :  Cats are smarter than dogs
searchObj.group(1) :  Cats
searchObj.group(2) :  smarter
searchObj.groups() :  ('Cats', 'smarter')
'''

re.match() 与 re.search() 的区别

re.match() 只匹配字符串的开始
如果字符串不符合正则表达式,则匹配失败,函数返回none
re.search()匹配整个字符串,直至找到一个匹配

import re

str0="ajgsdjhkahfbACJKSbweuiegfhibJASHBcjhbusdfgyuvhjfbkzaowsijeuwgfhrvbzsdbhgaesrqwybejkunfak"
print(re.search("gfhibjash",str0,re.I).span())  #从0开始
#(23, 32)
print(re.search("gfhibjash",str0))
#None
import re

str0="ajgsdjhkahfbACJKSbweuiegfhibJASHBcjhbusdfgyuvhjfbkzaowsijeuwgfhrvbzsdbhgaesrqwybejkunfak"
print(re.match("ajGsDJhkahfbA",str0,re.I).span())
#(0, 13)
print(re.match("jGsDJhkahfbA",str0,re.I))
#None

检索和替换

re.sub(pattern,repl,string,count=0,flags=0)

pattern : 正则中的模式字符串。
repl : 替换的字符串,也可为一个函数。
string : 要被查找替换的原始字符串。
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
flags : 编译时用的匹配模式,数字形式。

import re

phone = "2004-959-559 # 这是一个电话号码"

# 删除注释
num = re.sub(r'#.*$', "", phone)
print("电话号码 : ", num)

# 移除非数字的内容
num = re.sub(r'\D', "", phone)
print("电话号码 : ", num)

'''
电话号码 :  2004-959-559 
电话号码 :  2004959559
'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值