正则表达式

正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某

个条件的子串等。

正则表达式可以判断目标字符串是否符合特定的要求。

比如判断是否为手机号,身份证号,邮箱。

字符描述
\d表示任意的一位数字
\d\d两个\d就是表示任意的两位数字
\w表示任意的字母和数字
\s表示空格
.表示任意的内容
*表示内容出现0次到多次
+表示内容出现1次到多次
?表示内容出现0次到1次
^表示以……开头
$表示以……结尾
{n}表示内容重复n次
{n,m}表示内容最少重复n次,最多重复m次
{n,}表示最少重复n次
{,m}表示最多重复m次

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

compile后面写正则表达式的内容,()代表从目标字符串中获取的子串;

每一个()就是一个group组。

import re
pattern = re.compile('(\d+)(\w+)')
content = '12345helloWorld'
result = re.match(pattern,content)
# 返回的是一个匹配的对象
print(result)
# 返回的是符合要求的全部内容
print(result.group(0))
# 返回的是符合要求的第一组内容
print(result.group(1))
# 返回的是符合要求的第二组内容
print(result.group(2))

输出结果为:

<_sre.SRE_Match object; span=(0, 15), match='12345helloWorld'>
12345helloWorld
12345
helloWorld

match匹配的是内容的开始部分,作用等同于startwith。

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

如果在开头没找到的话就会返回一个None,前面多个空格也会找不到。

输出结果为:

my
None

贪婪模式与非贪婪模式

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

.*称之为贪婪模式

import re
content = 'aabbababa11b222'
pattern = re.compile('(a.*b)')
result = pattern.match(content)
print(result)

输出结果为:

<_sre.SRE_Match object; span=(0, 12), match='aabbababa11b'>

.*?称之为非贪婪模式

从a开始往后,任意字符出现0次或者多次直到遇见一个b,就结束。

import re
content = 'aabbababa11b222'
pattern = re.compile('(a.*?b)')
result = pattern.match(content)
print(result)

输出结果为:

<_sre.SRE_Match object; span=(0, 3), match='aab'>

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

import re
content = 'aabbababa11b222'
pattern = re.compile('.*?(b.*?b)')
result = pattern.match(content)
print(result)

输出结果为:

<_sre.SRE_Match object; span=(0, 4), match='aabb'>

*+同为贪婪模式

* 至少0次,至多无限次

+ 至少1次,至多无限次

import re
content = 'aabbababa11b222'
pattern = re.compile('(a.+b)')
result = pattern.match(content)
print(result)

输出结果为:

<_sre.SRE_Match object; span=(0, 12), match='aabbababa11b'>

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

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

输出结果为;

hello 
 world
hello \n world

匹配连续3个数字

import re
title = '12345Hello world'
# pattern = re.compile(r'\d\d\d')
pattern = re.compile(r'\d{3}')
result = pattern.match(title)
print(result.group(0))

输出结果为:

123

匹配全国固话,比如:0371-12345678

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

输出结果为:

<_sre.SRE_Match object; span=(0, 13), match='0371-12345678'>
0371
12345678

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

import re
pattern = re.compile('((abc|123)qwer)')
result = pattern.match('abcqwer')
print(result)
result = pattern.match('123qwer')
print(result)

输出结果为:

<_sre.SRE_Match object; span=(0, 7), match='abcqwer'>
<_sre.SRE_Match object; span=(0, 7), match='123qwer'>

search 找到字符串当中第一个符合正则的内容

注意:只找到第一个

import re
pattern = re.compile(r'http')
result = pattern.search('www.jd.com,http://www.taobao.com')
print(result)

输出结果为:

<_sre.SRE_Match object; span=(11, 15), match='http'>
import re
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'>
import re
pattern = re.compile(r'I')
result = pattern.search('I love you')
print(result)

输出结果为:

<_sre.SRE_Match object; span=(0, 1), match='I'>

findall 找到所有符合的内容

import re
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)

输出结果为:

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

输出结果为:

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

输出结果为:

吕布对战服部半藏,东方不败观战

匹配手机号

import re
pattern = re.compile(r'^((13[0-9])|(14[7])|(15[0-3]|15[5-9])|(16[6])|(18[0|5-9]))\d{8}$')
result = pattern.match('16666666666')
print(result)

输出结果为:

<_sre.SRE_Match object; span=(0, 11), match='16666666666'>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值