Python 正则表达式

正则表达式可以判断目标字符串是否是符合特定的要求,是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。

1.Python提供re模块,包含所有正则表达式的功能。在正则表达式中,\d表示可以匹配一个数字,\w表示可以匹配一个字母或者数字,比如:

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('不符合')

   match匹配的内容是从字符串开始部分进行,否则,输出结果为None。比如:

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

result = re.match(pattern,'love myself')
print(result)

2.正则表达式中,\s表示空格;.表示任意的内容,那么a.就是在a后面匹配任意的内容;*表示匹配的内容出现0到多次;+表示匹配的内容出现1次到多次;?表示匹配内容出现0次到1次。

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

   .* 称之为贪婪模式

# 找到一个以a开头,以最后一个b结尾的字符串
content = 'aabbababallb22'
pattern = re.compile('(a.*b)')
result = pattern.match(content)
print(result)

   .*? 称之为非贪婪模式

# 以a开头,以第一个b结尾的字符串
content = 'aabbababallb22'
pattern = re.compile('(a.*?b)')
result = pattern.match(content)
print(result)

   *+ 同为贪婪模式

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

4.在正则表达式中,^表示以......开头,$表示以......结尾;{n}表示匹配内容重复n次,也可以表示为\d{n};{n,m}表示匹配内容最少重复n次,最多重复m次,也可以表示为\d{n,m};{n,}表示匹配内容最少重复n次,{,m}表示匹配内容最多重复m次。

   匹配连续3个数字

content = 'aabbababallb22'
pattern = re.compile(r'\d{3}')
result = pattern.match(title)
print(result)

   匹配全国固定电话

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

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

pattern = re.compile('((haha|heihei)balabala)')
result = pattern.match('hahabalabala')
result = pattern.match('heiheibalabala')
print(result)

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

pattern = re.compile(r'you')
result = pattern.search('I love you,I miss you,I hate you')
print(result)

   findall 找到所有符合内容

content = '12345,55555'
pattern = re.compile(r'\d{5}')
result = pattern.findall(content)
print(result)

   sub 替换子串

content = '杨  过对战金轮法王,郭靖观战'
pattern = re.compile(r'杨\s*过')
result = pattern.sub('吕布',content)
print(result)
content = '杨  过对战金轮法王,郭靖观战'
key_word = [
    (r'杨\s*过','吕布'),
    (r'金轮法王','服部半藏'),
    (r'郭靖','东方不败')
]
for pattern,replace in key_word :
    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('15003875200')
print(result)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值