Python 正则表达式

在这里插入图片描述

#需求1:整行匹配只有一个字母a的字符串
#分析:字符串只包含字母a,那么就是这个a即是开头又是结尾
#^表示开头,$表示结尾。
#正则:^a$
import re
regex=r'^a$'
t='a'
print(re.findall(regex,t)) # ['a']
#需求1:整行匹配多个字母a的字符串
#分析:字符串只包含字母a
#^表示开头,$表示结尾。
#正则:^a+$
import re
regex=r'^a+$'  #+ 匹配0个或者多个字符
t='aaaaa'
print(re.findall(regex,t)) # ['aaaaa']

任意字符串

import re
t='asdasdasd223\t\r%sdasd' # 不包括\n 
regex=r'^.*$' # .* 匹配任意字符串
print(re.findall(regex,t)) # ['asdasdasd223\t\r%sdasd']

尽少匹配内容

import re
t='(aaaaa)))))(bbb)'
regex=r'\(.+\)' #  ()元字符需要转义  + 尽可能多的匹配
print(re.findall(regex,t)) # ['(aaaaa)))))(bbb)']

regex=r'\(.+?\)' # +? 尽可能少的匹配
print(re.findall(regex,t)) # ['(aaaaa)', '(bbb)']

匹配数字

import re
t='I am shiyue41'
regex=r'\d' #  \d 匹配数字
print(re.findall(regex,t)) # ['4', '1']

regex=r'\d+' # + 尽可能多的匹配
print(re.findall(regex,t)) # ['41']

提取字母

import re
t='Shiyue41 Shiyue42' #提取字母 S和y
regex=r'[Sy]' #正则:[Sy],表示匹配S和y
print(re.findall(regex,t)) # ['S', 'y']

regex=r'(Shi|yue)' # 多字母 正则 (|)
print(re.findall(regex,t)) # ['Shi', 'yue', 'Shi', 'yue']

捕获分组值

import re
t="<a id='a' href='https://www.baidu.com/' class='bb'>百度</a>"
# 先匹配a标签
regex=r"<a.+?>.+?</a>" #正则:<a.+?>.+?</a>
print(re.findall(regex,t)) # ["<a id='a' href='https://www.baidu.com/' class='bb'>百度</a>"]

# 进行分组,捕获分组值
regex=r"<a.+?href='(.+?)'.*?'>(.+?)</a>"  # 正则 () 捕获分组值
print(re.findall(regex,t)) # [('https://www.baidu.com/', '百度')]

排除拼写错误

import re
t='hellohallohollohrllo' # 排除拼写错误的值
regex=r"h[^e]llo" # 正则 排除字符组 [^...],表示不能出现某字符
print(re.findall(regex,t))  # ['hallo', 'hollo', 'hrllo']

获取数字

import re
t='fs100fs33.23aaa-45.67fdww-300www' # 获取数字
#分析:我们看到字符串中有正数,有负数;有整数还有浮点数
#1.首先匹配整数,这个简单 \d+ 浮点数部分可能存在也可能不存在
#浮点数部分可以用\.\d+来表示,表示存在不存在的?直接加到后面可以吗?
#像这样\.\d+?,明显是不对的。+?连起来是尽可能少的匹配的意思。
#所有我们把浮点数部分用括号括起来,像这样(\.\d+)?
regex=r"[+-]?\d+(\.\d+)?" # 正则 排除字符组 [^...],表示不能出现某字符
print(re.findall(regex,t))  # ['', '.23', '.67', '']

#结果明显是不对的,为什么是这个结果呢?因为()表示捕获分组,
#匹配结果只返回的被捕获的分组。但是这个括号又不得不用,怎么办?
#可以使用非捕获分组(?:...)
regex=r"[+-]?\d+(?:\.\d+)?"
print(re.findall(regex,t)) # ['100', '33.23', '-45.67', '-300']

获取IP地址

import re
t='address=192.168.0.123,name=tom,score=99.5'
regex=r"\d{1,3}(?:\.\d{1,3}){3}" # 正则 {} 表示字符出现次数
print(re.findall(regex,t)) # ['192.168.0.123']

参考:https://blog.csdn.net/maosijunzi/article/details/80009323

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值