re模块

什么是正则表达式

一组特殊符号组成的表达式,用于描述某种规则

正则表达式的作用,以及使用场景

1.用于从字符串中匹配满足某种规则的内容,多数用于爬虫应用程序

2.判断字符串串内容是否满足某种规则,多用于严重用户输入。例如密码是否规范,手机号是否正确等

元字符

import re

#part1  查询变量s中的部分字符串
s = "123454http://www.baidu.com/12htp46"
res = re.findall(r'http://www.baidu.com/', s)
print(res)
['http://www.baidu.com/']
# part2
# 多行匹配
# re.S:将 也能被.匹配 re.I:不区分大小写 re.M:结合^ $来使用,完成多行匹配
# print(re.findall(r'^owen.+vv$', 'owen_name_vv owen_age_vv zero_owen owen_oo', re.M))

# 多个字符
# print(re.findall(r'zo*?', r'zzozoozooo')) # {0,n} 1到n个,非贪婪匹配,尽可能少的匹配 == {0}
# print(re.findall(r'zo+?', r'zzozoozooo')) # {1,n} 1到n个,非贪婪匹配,尽可能少的匹配 == {1}
# print(re.findall(r'zo?', r'zzozoozooo')) # {0,1} 0到1个,贪婪匹配,尽可能多的匹配
# print(re.findall(r'zo+', r'zzozoozooo')) # {1,n} 1到n个,贪婪匹配,尽可能多的匹配
# print(re.findall(r'zo*', r'zzozoozooo')) # {,n} 0到n个,贪婪匹配,尽可能多的匹配
# print(re.findall(r'o{1,2}', r'foodfoood')) # {n,m} n到m个,贪婪匹配,尽可能多的匹配
# print(re.findall(r'o{2,}', r'foodfoood')) # {n, } n到多个,贪婪匹配,尽可能多的匹配
# print(re.findall(r'[a-z]{2}', r'123abcabc')) # {n} n代表个数
# print(re.findall(r'ab', r'123abcabc'))

# 单个字符
# print(re.findall(r'.', '123[a b c a bcABC好好*_12')) # 匹配所有单个字符(刨除换行)
# print(re.findall(r's', '123[a b c a bcABC好好*_12')) # 匹配所有空白、制表符、换行符、回车符
# print(re.findall(r'S', r'123[abcabcABC好好*_12')) # 字母+数字+_ 对立面
# print(re.findall(r'w', r'123[abcabcABC好好*_12')) # 字母+数字+_
# print(re.findall(r'[A-Za-z0-9好]', r'123[abcabcABC好好')) # 字母+数字
# print(re.findall(r'[A-Z]|[a-z]', r'123[abcabcABC')) # 字母 a|b => 匹配a或b
# print(re.findall(r'[0-9]', r'123abcabc')) # 数字
# print(re.findall(r'D', r'123abcabc')) # 非数字
# print(re.findall(r'd', r'123abcabc')) # 数字
# print(re.findall(r'a', r'123abcabc'))

# 转义
# print(re.findall(r'\a', r'123abc')) # 用来转义,在正则中\代表匹配
# part3
# 分组:
# 1.从左往右数数 ( 进行编号,自己的分组从1开始,group(0)代表匹配到的目标整体
# 2.(?: ... ):取消所属分组,()就是普通(),可以将里面的信息作为整体包裹,但不产生分组
# regexp = re.compile('(?:(?:http://)((.+))/)') # 生成正则对象
# target = regexp.match('http://(www.baidu.com)/')
# print(target.group(1))


# result = re.findall(r'^http://.+/$', 'http://www.baidu.com/ http://www.sina.com.cn/', re.M)
# # print(result)
# for res in result:
# t = re.match('http://(.+)/', res)
# print(t.group(1))

# part4
# 替换:
# 1.不参与匹配的原样带下 2.参与匹配的都会被替换为指定字符串
# 3.在指定字符串值 um拿到具体分组 4.其他字符串信息都是原样字符串
print(re.sub('《(?:[a-z]+)(d+)(.{2})', r'\2abc21', '《abc123你好》'))

# print(re.sub('[0-9]+', '数字', 'abc123你好'))

# print(re.split('s', '123 456 789 000'))
# print(re.search('http://(.+)/', 'http://www.baidu.com/'))


原文地址:https://www.cnblogs.com/zhangdajin/p/11144691.html