2021-10-09 python从入门到精通--第八章 正则表达式

正则表达式

语法

行定位符

行定位符用来描述字符串边界
^表示行的开始
$表示行的结尾

^tm 表示要匹配行开头为tm的内容
tm$ 表示要匹配行结尾为tm的内容

元字符

\bmr\w*\b

匹配以字母mr为开头的单词
先匹配单词开始处(\b)
匹配任意数量的字母或数字(\w*)
匹配单词结束处(\b)
该表达式匹配如”mrsoft“"mr123545"等

限定符

?:匹配前面的字符0次或一次
+:匹配前面的字符一次或多次
*:匹配前面的字符零次或多次
{n}:匹配前面的字符n次
{n,}:匹配前面的字符最少n次
{n,m}:匹配全面的字符最少n次,最多m次

字符类 []

例:

[aeiou]可以匹配任何元音字母
[.?!]可以匹配三个标点符号
[a-z0-9A-Z]等同于\w
[\u4e00-\u9fa5]可以匹配任意一个汉字
[\u4e00-\u9fa5]+可以匹配连续多个汉字

排除字符 ^

例:

[^a-zA-Z]:匹配一个非字母的字符

选择字符 |

(^\d{15}$)|(^\d{18}$):可以15位数字或者18位数字

转义字符 \

[1-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}
匹配IP地址

分组 ()

限定作用域:
(thir|four)th
匹配thirth和fourth
分组:
(\.[0-9]{1,3}){3}
对(\.[0-9{1,3}])重复三次

使用re模块

import re

匹配字符串

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

pattern:模式字符串
string:源字符串
flags:标志位,A(ASCII),I(不区分大小写),M(匹配到每行的头尾),S(’.‘字符匹配所有字符包括换行符),X(忽略模式字符串中未转义的空格和注释)
例:

>>> string = '项目名称 MR_SHOP mr_shop'
>>> match = re.match(pattern,string,re.I)
>>> print(match)
None 
>>> pattern = r'mr_\w+'
>>> string = 'MR_SHOP mr_shop'
>>> match = re.match(pattern,string,re.I)
>>> print(match)
<re.Match object; span=(0, 7), match='MR_SHOP'>
>>> match.start()		#匹配值的开始位置
0
>>> match.end()		#匹配值的结束位置
7
>>> match.span()		#匹配位置元组
(0, 7)
>>> match.string		#要匹配的字符串
'MR_SHOP mr_shop'	
>>> match.group()		#匹配数据
'MR_SHOP'
search()
re.search(pattern,string,[flags])

pattern:模式字符串
string:源字符串
flags:标志位
例:

>>> pattern = r'mr_\w+'
>>> match = re.search(pattern,string,re.I)
>>> print(match)
<re.Match object; span=(0, 7), match='MR_SHOP'>
>>> string = '项目名称 MR_SHOP mr_shop'
>>> match = re.search(pattern,string,re.I)
>>> print(match)
<re.Match object; span=(5, 12), match='MR_SHOP'>
findall()
re.findall(pattern,string,[flags])

pattern:模式字符串
string:源字符串
flags:标志位
例:

>>> pattern = r'mr_\w+'
>>> string = 'MR_SHOP mr_shop'
>>> match = re.findall(pattern,string,re.I)
>>> print(match)
['MR_SHOP', 'mr_shop']
>>> string = '项目名称 MR_SHOP mr_shop'
>>> match = re.findall(pattern,string)
>>> print(match)
['mr_shop']
>>> str1 = '127.0.0.1 192.168.1.66'
>>> pattern = r'[1-9]{1,3}(\.[0-9]{1,3}){3}'
>>> re.findall(pattern, str1)
['.1', '.66']
>>> pattern = r'([1-9]{1,3}(\.[0-9]{1,3}){3})'
>>> re.findall(pattern, str1)
[('127.0.0.1', '.1'), ('192.168.1.66', '.66')]

替换字符串

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

pattern:模式字符串
repl:替换的字符串
string:源字符串
count:替换的最大次数,默认为0,即替换所有的匹配
flags:标志位
例:

>>> pattern = r'1[34578]\d{9}'
>>> string = '中奖号码为84978981 联系电话为13611111111'
>>> re.sub(pattern,'1xxxxxxxxxx',string)
'中奖号码为84978981 联系电话为1xxxxxxxxxx'

使用正则表达式分割字符

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

pattern:模式字符串
string:源字符串
maxsplit:最大拆分次数
flags:标志位
例:

>>> pattern = r'[?|&]'
>>> url = 'http://www.baidu.com/123&456?789&&100'
>>> re.split(pattern,url)
['http://www.baidu.com/123', '456', '789', '', '100']
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值