"""
在正则匹配的时候 字符串前面加一个r 的效果
表示原生字符串 能够忽略转义符号带来的影响 \n 就是字符串 "\n" 没有换行的含义
比如 re.findall(r"a\nbc","a\nbc")
"""
content = "asdasd1m123123,4255,asdsdfsdf,,,1ijio134ioj234jio234"
rest = re.findall("[\d]+", content)
print(rest)
# 找出字符串中的字母
rest = re.findall("[a-zA-Z]+", content)
print(rest)
#
print(re.search("[,]+", content).group())
print(re.findall("[,]", content))
import re
# 使用group 与 groups 方法
idCard1 = "430656199610015493"
idCard2 = "43065619961001548X"
#在使用正则匹配身份证时 如果想在正确匹配到身份证时 再获取该身份证的生日年龄 这里使用分组的方式非常方便
compile1=re.compile(r"(\d{6})(?P<year>\d{4})((?P<month>\d{2})(?P<day>\d{2}))\d{2}\d{1}([0-9]|X)")
sear1=compile1.search(idCard1)
group1=sear1.groups()
print(group1[0])
# 可以直接在正则分组中新增 ?P<param> 通过 groupdict() 直接获得json 数据 通过Key 获取数据
print(sear1.groupdict())
str1 = "one1two22222three33445four444441five555512six666"
# 使用分隔split方法 根据数字分隔 英文单词结果 为: ['one', 'two', 'three', 'four', 'five', 'six', '']
compile1 = re.compile(r"\d+")
print(compile1.split(str1))
# 使用替换sub 方法 根据正则匹配到的字符 替换成想要的结果 为:one@two@three@four@five@six@
sub1=compile1.sub("@",str1)
print(sub1)
# 结合分组 使用替换对两个单词进行转换
str2="hello world"
compile2=re.compile(r"(\w+) (\w+)")
print(compile2.sub(r"\2 \1",str2))
# 在替换时对第一个单词进行大写
def f(x):
return x.group(2).upper()+" "+x.group(1)
print(compile2.sub(f,str2))
# 使用lambda 对上面的方法进行简写
print(compile2.sub(lambda x: x.group(2).upper()+" "+x.group(1),str2))
# 查找html中的图片地址
# 有任何正则匹配上的疑问 需要上官网文档进行查询 https://docs.python.org/zh-cn/3/library/re.html
import re
file01 = open("outer_html.html",encoding="utf-8")
str1=file01.read()
# 正则模式 () 括号为分组 ?P<param> 定义该分组的名称 结果可以通过名称获取
compile=re.compile(r"<img.+?src=\"(?P<url1>.+?)\"(?P<url2>.+?)>")
list1=compile.findall(str1)
print(list1)
for j in list1:
print(j)
print("="*50)
for i in list1:
# 替换
print(re.sub(r"&","&",i[0]))
file01.close()
Python-正则的基本使用
最新推荐文章于 2024-07-20 00:30:00 发布