python 正则表达式
时间:2023-3-1 21:38 作者:wen 分类: Python
# 正则表达式
# 正则表达式通常被用来检索, 替换那些符合某个模式(规则)的文本
# python正则表达式自1.5版本起增加了re模块, 它提供Perl风格的正则表达式模式, 拥有全部的正则表达式功能, 是c语言写的,匹配速度非常快
# re 模块
import re
# match 从起始位开始匹配, 成功返回 match 对象, 失败返回 None, 用 group() 获取匹配成功的字符串.
# 参数1: 匹配的正则表达式
# 参数2: 要匹配的字符串
# 参数3: 标志位, 用来控制匹配方式, 如: 大小写, 多行匹配
# 标志位
# 修饰符 描述
# re.I 是匹配对大小写不敏感
# re.L 做本地化识别(locale-aware)匹配
# re.M 多行匹配, 影响^和$
# re.S 使.匹配包括换行在内的所有字符
# re.U 根据Unicode字符集解析字符. 这个标志影响\w\W\b\B.
# re.X 该标志通过给予你更灵活的格式以便你将正则表达写的更易于理解
str_1 = "hello world xxxx"
res = re.match('H', str_1, re.I)
if res:
print(type(res))
print(res.group())
else:
print(type(res))
# group(num)或groups()匹配对象函数来获取匹配表达式
# group(num=0) 匹配的整个表达式的字符串,group可以一次输入多个租号, 返回一个元组
# groups() 返回一个包含所有小组字符串的元组, 从1到所含的小组号print(type(res))
res = re.match('(.*)\s(.*)', str_1, re.I | re.M)
if res:
print(type(res))
print(res.groups())
print(res.group(1))
print(res.group(2))
else:
print(type(res))
# 匹配率字符(常用)
# 符号 匹配规则
# .(点) 匹配任意1个字符除了换行符\n
# [abc] 匹配abc中的任意一个字符
# \d 匹配一个数字,0-9
# \D 匹配非数字,即不是数字
# \s 匹配空白,即空格, tab键
# \S 匹配非空格, 除空格, tab键之类的
# \w 匹配单词字符, 即a-z,A-Z,0-9,_
# \W 匹配非单词字符
# 匹配字符数量
# 符号 匹配规则
# * 0次或者多次
# + 1次或者多次
# \? 匹配前一个字符出现1次或者0次
# {m} 匹配m次
# {m,} 匹配至少出现m次
# {n,m} 匹配n到m次
# 在正则前面加r 表示原生的字符串
print(re.match(r'c:\\a.txt', 'c:\\a.txt').group())
# 开头 和 结尾
# 符号 匹配规则
# ^ 匹配字符串开头, 在[^-]代表取反
# $ 匹配字符串结尾
# 分组匹配
# 符号 匹配规则
# | 匹配左右任意一个表达式
# (ab) 将括号中字符为一个分组
# \num 引用分组num匹配到的字符串
# (?P) 分组起别名
# (?P=name) 引用别名为name分组匹配到的字符串
# 起别名
str_2 = "<div><h1>www.baidu.com</h1></div>"
res = re.match(r'<(?P<div>\w*)><(?P<h1>\w*)>.*</(?P=h1)></(?P=div)>', str_2)
print(res.groups())
print(res.group())
# re.compile 将正则表达式模式编译成一个正则表达式对象
# 优点: 将字符串转为正则表达式对象,使用compile 只用转换一次
reobj = re.compile('\d{4}')
res = reobj.match('1234')
print(res.group())
# re.search 在全文中匹配一次, 匹配到就返回
str_3 = "我爱我的祖国, I Love China"
rs = re.search('China',str_3)
print(rs.group())
# re.findall 返回一个列表
str_4 = '华为是华人的骄傲'
res = re.findall('华.',str_4)
print(res)
# re.sub 实现目标的搜索和替换
# re.subn 实现目标的搜索和替换, 返回替换的数量, 以元组的形式
str_5 = 'python是很受欢迎的编程语言'
pattern = '[a-zA-z]+'
res = re.sub(pattern, 'java', str_5)
print(res)
res = re.subn(pattern, 'java', str_5)
print(res)
# re.split 实现分割字符串
str_6 = '百度,华为,腾讯,阿里'
res = re.split(',', str_6)
print(res)
# 贪婪模式
# python默认是贪婪模式, 在 * ? + {n,m}后面加 ? ,使变成非贪婪模式
标签: 正则表达式