python 正则表达式

上一篇是转载别人的,自己想来做一下总结,写一篇属于自己的。

正则表达式:可以判断目标字符串是否符合特定的要求,比如判断是否为手机号,身份证号,邮箱号。

在正则表达式中,下面的一些特殊字符代表不同含义,可能总结的不够完整。

\d:表示任意的一位数字

\d\d:表示任意的两位数字

\w:表示任意的一个字母和数字

\s:表示空格

.:表示任意的内容   比如1,2,3,a,b,c

a.:在a后面匹配任意内容   比如ab  a1  a2  ac

*:表示内容出现0次到多次

+:表示内容出现一次到多次

:表示内容出现0次到1次

^:脱字符   表示以...开头

$:表示以...结尾

{n}:表示内容重复n次

{n,m}:表示最少重复n次,最多重复m次

{n,}:表示最少重复n次

{,m}:表示最多重复m次

# pattern模式
# compile编译   后面写正则表达式的内容
# ()代表从目标字符串当中获取的子串
# 每一个()就是一个group组
pattern = re.compile('(\d+)(\w+)')
content = '123helloworld'
# match匹配
result = re.match(pattern,content)

if result:
    # 返回的是一个匹配对象
    print(result)
    # 返回的符合要求的全部类容
    print(result.group(0))

    print(result.group(1))
    print(result.group(2))
else:
    print('不符合')
<_sre.SRE_Match object; span=(0, 13), match='123helloworld'>
123helloworld
123
helloworld

 

pattern = re.compile('my')
result = re.match(pattern,'myself')
print(result.group(0))
my

贪婪模式与非贪婪模式

正则表达式默认为贪婪模式,尽量找到所有的符合要求的类容

.*称之为贪婪模式

content = 'aabbabab11b222'
pattern = re.compile('(a.*b)')
result = pattern.match(content)
print(result)
<_sre.SRE_Match object; span=(0, 11), match='aabbabab11b'>

 

.*?称之为非贪婪模式

content = 'aabbabab11b222'
pattern = re.compile('(a.*?b)')
result = pattern.match(content)
print(result)
<_sre.SRE_Match object; span=(0, 3), match='aab'>

匹配任意字符开头,后面找到一个以b开始以b结尾的内容

pattern = re.compile('.*?(b.*?b)')
result = pattern.match(content)
print(result)
<_sre.SRE_Match object; span=(0, 4), match='aabb'>

*+ 同为贪婪模式

*至少0次 至多无线次               

+ 至少1次  至多无限次

pattern = re.compile('(a.+b)')
result = pattern.match(content)
print(result)
<_sre.SRE_Match object; span=(0, 11), match='aabbabab11b'>

r   raw   string   会将字符串里的转义字符输出出来

print('hello \n world')
print(r'hello \n world')
hello 
 world
hello \n world

匹配连续3个数字

title = '0123Hello world'
# pattern = re.compile(r'\d\d\d')
pattern = re.compile(r'\d{3}')
result = pattern.match(title)
print(result)
<_sre.SRE_Match object; span=(0, 3), match='012'>

匹配全国固话  0371-66666666

pattern = re.compile(r'(\d{4})-(\d{8})')
result = pattern.match('0371-68686688')
print(result.group(1))
print(result.group(2))
0371
68686688

|  或者  设置用于不同情况的正则

pattern = re.compile('((haha|heihei)balabala)')
result = pattern.match('hahabalabala')
result = pattern.match('heiheibalabala')
print(result)
<_sre.SRE_Match object; span=(0, 14), match='heiheibalabala'>

search  找到字符串当中第一个负责正则的内容   注意:只找到第一个

pattern = re.compile(r'http')
# search 查找
result = pattern.search('www.jd.com,http://www.taobao.com')
print(result)
<_sre.SRE_Match object; span=(11, 15), match='http'>

 

pattern = re.compile(r'you')
result = pattern.search('I love you , I miss you , I hate you')
print(result)
<_sre.SRE_Match object; span=(7, 10), match='you'>

findall 找到所有符合的类容

content = '12345,上山打老虎,老虎没打着,大只小松鼠,55555'
pattern = re.compile(r'\d{5}')
result = pattern.findall(content)
print(result)
['12345', '55555']

sub:替换子串(字符串的一部分)

\s:匹配空白的类容

content = '杨    过对战金轮法王,郭靖观战'
pattern = re.compile(r'杨\s*过')
result = pattern.sub('吕布',content)
print(result)
吕布对战金轮法王,郭靖观战
pattern = re.compile(r'金轮法王')
result = pattern.sub('服部半藏',result)
print(result)
吕布对战服部半藏,郭靖观战

 

key_world = [
    (r'杨\s*过','吕布'),
    (r'金轮法王', '服部半藏'),
    (r'郭靖','东方不败')
]
for pattern , replace in key_world:
    pattern = re.compile(pattern)
    content = pattern.sub(replace,content)
    print(content)
吕布对战金轮法王,郭靖观战
吕布对战服部半藏,郭靖观战
吕布对战服部半藏,东方不败观战

找到手机号段对应

pattern = re.compile(r'^((13[0-9])|(14[67])|(15[0-3]|15[5-9])|(18[0|5-9]))\d{8}$')
result = pattern.match('14639760302')
print(result)
<_sre.SRE_Match object; span=(0, 11), match='14639760302'>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值