【python】(十五)python内置库——正则表达式re

目录

  • 1. 正则表达式
    • 1.1 什么是正则表达式
    • 1.2 使用场景
    • 1.3 在 python 中使用正则表达式
  • 2. 使用 re 模块实现正则表达式操作
    • 2.1 正则表达式对象转换
    • 2.2 匹配字符串
    • 2.3 替换字符串
    • 2.4 分割字符串


1. 正则表达式

1.1 什么是正则表达式

  • 正则表达式就是记录文本规则的代码
  • 可以查找操作符合某些复杂规则的字符串

1.2 使用场景

  • 处理字符串
  • 处理日志

1.3 在 python 中使用正则表达式

  • 把正则表达式作为模式字符串
  • 正则表达式可以使用原生字符串来表示
  • 原生字符串需要在字符串前方加上 r'string'
# 匹配字符串是否以 gaopangpang_ 开头

r'gaopangpang_\w+'

2. 使用 re 模块实现正则表达式操作

2.1 正则表达式对象转换

  • compile():将字符串转换为正则表达式对象
  • 需要多次使用这个正则表达式的场景
#导入re模块
import re

'''
prog:正则对象,可以直接调用匹配、替换、分割的方法,不需要再传入正则表达式
pattern:正则表达式
'''

prog = re.compile(pattern)

示例:

import re

#匹配包含高胖胖的字符串
pattern=r"gaopangpang"
#将正则表达式转换成正则表达式对象
prong=re.compile(pattern)
print(type(prong))

#打印内容: 
#已经转成正则表达式对象

2.2 匹配字符串

  • match():从字符串的开始处进行匹配
  • search():在整个字符串中搜索第一个匹配的值
  • findall():在整个字符串中搜索所有符合正则表达式的字符串,返回列表
import re

'''
pattern: 正则表达式
string: 要匹配的字符串
flags: 可选,控制匹配方式
    - A:只进行 ASCII 匹配
    - I:不区分大小写
    - M:将 ^ 和 $ 用于包括整个字符串的开始和结尾的每一行
    - S:使用 (.) 字符匹配所有字符(包括换行符)
    - X:忽略模式字符串中未转义的空格和注释
'''

re.match(pattern, string, [flags])
re.search(pattern, string, [flags])
re.findall(pattern, string, [flags])

示例1:match

从字符串的开始处进行匹配

import re

#匹配包含以gao开头的字符串
pattern=r"gao\w+"
#将正则表达式转换成正则表达式对象
s1="Gaopangpang is a nice guy."
match1=re.match(pattern,s1,re.I)
print(match1)
print(f"匹配开始位置:{match1.start()}")
print(f"匹配结束位置:{match1.end()}")
print(f"匹配位置的元祖:{match1.span()}")
print(f"要匹配的字符串:{match1.string}")
print(f"匹配的数据:{match1.group()}")

"""
打印结果:

匹配开始位置:0
匹配结束位置:11
匹配位置的元祖:(0, 11)
要匹配的字符串:Gaopangpang is a nice guy.
匹配的数据:Gaopangpang
"""

s2="Everybody like gaopangpang."
match2=re.match(pattern,s2,re.I)
print(match2)

"""
打印结果:
None
"""


示例2:search

在整个字符串中搜索第一个匹配的值

import re

#匹配包含以gao开头的字符串
pattern=r"gao\w+"
#将正则表达式转换成正则表达式对象
s1="Gaopangpang is a nice guy."
match1=re.search(pattern,s1,re.I)
print(match1)
print(f"匹配开始位置:{match1.start()}")
print(f"匹配结束位置:{match1.end()}")
print(f"匹配位置的元祖:{match1.span()}")
print(f"要匹配的字符串:{match1.string}")
print(f"匹配的数据:{match1.group()}")

"""
打印结果:

匹配开始位置:0
匹配结束位置:11
匹配位置的元祖:(0, 11)
要匹配的字符串:Gaopangpang is a nice guy.
匹配的数据:Gaopangpang
"""

s2="Everybody like gaopangpang. Gaopangpang is very happy."
match2=re.search(pattern,s2,re.I)
print(match2)
print(f"匹配开始位置:{match2.start()}")
print(f"匹配结束位置:{match2.end()}")
print(f"匹配位置的元祖:{match2.span()}")
print(f"要匹配的字符串:{match2.string}")
print(f"匹配的数据:{match2.group()}")

"""
打印结果:

匹配开始位置:15
匹配结束位置:26
匹配位置的元祖:(15, 26)
要匹配的字符串:Everybody like gaopangpang. Gaopangpang is very happy.
匹配的数据:gaopangpang
"""

示例3:findall

在整个字符串中搜索所有符合正则表达式的字符串返回列表

import re

#匹配包含以gao开头的字符串
pattern=r"gao\w+"

s2="Everybody like gaopangpang. Gaopangpang is very happy."
match2=re.findall(pattern,s2,re.I)
print(match2)

"""
打印结果:
['gaopangpang', 'Gaopangpang']
"""

2.3 替换字符串

sub():实现字符串替换

import re

'''
pattern:正则表达式
repl:要替换的字符串
string:要被查找替换的原始字符串
count:可选,表示替换的最大次数,默认值为 0,表示替换所有匹配
flags:可选,控制匹配方式
'''

re.sub(pattern, repl, string, [count], [flags])

示例:

import re

#匹配手机号码
pattern=r"1[34578]\d{9}"

s1="中奖号码联系电话:13200000001"
match2=re.sub(pattern,'1XXXXXXXXXX',s1)
print(match2)
"""
打印结果:
中奖号码联系电话:1XXXXXXXXXX
"""

2.4 分割字符串

split():根据正则表达式分割字符串,返回列表

import re

'''
pattern:正则表达式
string:要匹配的字符串
maxsplit:可选,表示最大拆分次数
flags:可选,控制匹配方式
'''

re.split(pattern, string, [maxsplit], [flags])

示例:

import re

#匹配分割符
pattern=r"[?|&]"
#待分割的网址
url="https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=monline_3_dg&wd=%E5%93%88%E5%93%88&fenlei=256&rsv_pq=99fde4c600070362&rsv_t=a8ffxlvPLgOOTFba0r80f2npHbE0bml8%2Bn07CwmlCgjB2dkIrgGxgUfSM3lSG%2F%2BtAlaU&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug3=6&rsv_sug1=2&rsv_sug7=101&rsv_sug2=0&rsv_btype=t&inputT=398&rsv_sug4=1802"
result=re.split(pattern,url)
print(result)

"""
打印结果:
['https://www.baidu.com/s', 'ie=utf-8', 'f=8', 'rsv_bp=1', 'rsv_idx=1', 'tn=monline_3_dg', 'wd=%E5%93%88%E5%93%88', 'fenlei=256', 'rsv_pq=99fde4c600070362', 'rsv_t=a8ffxlvPLgOOTFba0r80f2npHbE0bml8%2Bn07CwmlCgjB2dkIrgGxgUfSM3lSG%2F%2BtAlaU', 'rqlang=cn', 'rsv_enter=1', 'rsv_dl=tb', 'rsv_sug3=6', 'rsv_sug1=2', 'rsv_sug7=101', 'rsv_sug2=0', 'rsv_btype=t', 'inputT=398', 'rsv_sug4=1802']
"""

你可能感兴趣的:(Python,python,正则表达式,re)