«

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}后面加 ? ,使变成非贪婪模式

标签: 正则表达式