#需求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