Python字符串及正则表达式(二)

1.6.2正则表达式

在处理字符串时,经常会有查找符合某些复杂规则的字符串的需求。正则表达式就是用于描述这些规则的工具。说白了 正则表达式用来判断某些字符串是不是符合正则表达式的规则。

1.6.2.1 行定位符

行定位符就是用来描述字符串的边界,”^”表示行的开始,”&”表示行的结尾

^yz

该表达式表示要匹配字符串yz开始的位置是行头

yz&

该表达式表示要匹配字符串yz结束的位置是行尾

1.6.2.2元字符

除了前面介绍的元字符”^”和”&”外,正则表达式里还有更多的元字符。

代码说明
.匹配除换行符以外的任意字符
\w匹配字母、数字、下划线或汉字
\W匹配除字母、数字、下划线或汉字以外的字符
\s匹配单个的空白符
\S除单个空白符以外的字符
\b匹配单词的开始或结束,单词的分界符通常是空格,标点符号或者换行
\d匹配数字

1.6.2.3限定符

我们指定了字符,但是并没有指定字符出现的次数,指定限定符出现的次数比如匹配8位qq号可以使用下面的表达式

^\d{8}&
限定符说明举例
匹配前面的字符零次或一次Co?r 可以匹配Cor 或 Cr
+匹配前面的字符一次或多次go+gle 可以匹配 gogle到go…gle
*匹配前面的字符零次或多次go*gle 可以匹配 ggle到go…gle
{n}匹配前面的字符n次go{2}gle 可以匹配google
{n,}匹配前面的字符最少n次go{2,}gle 可以匹配google到go…gle
{n,m}匹配前面的字符最少n次,最多m次go{2,3}gle 可以匹配google和gooogle

1.6.2.4字符类

正则表达式查找数字和字母是比较简单的,如果是查找没有预定义的字符要怎么办?
很简单,只需要在方括号里列出他们就行了,像[aeiou]可以匹配 任何一个英文aeiou
[0-9]匹配0-9的数字

1.6.2.5排除字符

排除字符是^括号,在1.6.2.1章节中,表示行的开始。这里是将其放到方括号中,表示排除的意思
示例

[^a-zA-Z]  #该表达式用于匹配一个不是字母的字符

1.6.2.6选择字符

选择字符 ”|” 可以理解为或

[a-zA-Z]|[0-9]  #匹配一个字母或匹配一个数字

1.6.2.7转义字符

因为”.”表示匹配一个任意字符,如果我们想要匹配ip地址,就会用到”.” 这里就会有冲突,所以我们会使用转义字符 \ 表示这个”.”不是元字符

1.6.2.8分组

使用()可以用来分组,举个例子吧

([0-9]{8})+  #将[0-9]{8}字符重复1次或多次

1.6.2.9在Python中使用正则表达式语法

在Python中使用正则表达式时,是将其作为模式字符串使用的。如果匹配以字母m开头的单词的正则表达式转化为模式字符串,则不能直接在其两侧添加引号定界符。
示例:

‘\bm\w*\b’

而是需要将其中的”\”进行转义,转换后的结果为:

‘\\bm\w*\\b’

由于模式字符串中可能包括大量的特殊字符和反斜杠,所以需要写为原生字符串,即在模式字符串前加r或R

r'\bm\w*\b'

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

Python中提供了re模块,用于实现正则表达式的操作。在实现时,可以使用re模块提供的方法进行匹配字符串、替换字符串、分割字符串

1.6.3.1匹配字符串

re模块中提供了三种方法:match()、search()和findall()等方法,用法一致这里只介绍match方法
使用match()方法进行匹配

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

pattern:表示模式字符串,由要匹配的正则表达式转换而来
string:表示要匹配的字符串
flag:可选参数,表示标志位,用于控制匹配方式

标志说明
A或ASCII对于\w 、\W、 \b 、\B 、\d 、\D、 \s 和\S 只进行ASCII匹配
I 或IGNORECASE执行不区分字母大小写的匹配
M或MULTILINE将^和$用于包括整个字符串的开始和结尾的每一行
S或DOTALL使用(.)字符匹配所有字符,包括换行符
X或VERBOSE忽略模式字符串中未转义的空格和注释

示例代码:

import re
pattern = r'gy_\w+'
string1="Gy_sdks"
string2="GG@@@@"
match1 =re.match(pattern,string1,re.I)  #re.I 表示不区分大小写
match2 =re.match(pattern,string2,re.I)
print(match1)
print(match2)

结果:

<re.Match object; span=(0, 7), match='Gy_sdks'>
None

1.6.3.2 替换字符串

sub方法用于实现字符串替换

re.sub(pattern,rep1,string,count,flag)

Pattern:表示模式字符串
rep1:要替换的字符串
string:表示要被查找替换的原始字符串
count:可选参数,表示模式后替换的最大次数
flag:可选参数 可match方法一致

示例代码:

import re
pattern=r'1[3579]\d{9}'
string="中奖号码为:84978981 联系电话为:13611111111"
result=re.sub(pattern,"1XXXXXXXXXX",string) #将string中符合pattern中的字符串替换为“1XXXXXXXXXX”
print(result)

结果:

中奖号码为:84978981 联系电话为:1XXXXXXXXXX

1.6.3.3使用正则表达式分割字符串

split()方法实现根据正则表达式分割字符串

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

pattern:表示模式字符串
string:表示要匹配的字符串
maxsplit:可选参数,表示为最大的拆分次数
Flags:标志位,同match()函数
示例代码:

import re
pattern=r'\d+'
string="我是1名小学生,我的语文成绩是99,我的数学成绩是100"
result=re.split(pattern,string) #出现数字就切割
print(result)

结果:

['我是', '名小学生,我的语文成绩是', ',我的数学成绩是', '']
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谷雨飞鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值