Python3:正则表达式

正则表达式也称为 REs

一、常用的匹配

\d        任意十进制数字
\s        任意空白字符(空格、换行、制表)
\w        任意单词和数字
\b        单词的开始或结束
[abc$]    a或b或c或$,虽然$是元字符,但是方括号里匹配其本身
*         0次或多次
+         1次或多次
?        0次或1次
.         换行符以外的任意字符
{m}       m次
{m,}      m次或m次以上
{m,n}     m次到n次(包含m、n次本身)
^         开始位置
$         结束位置
|         或

二、反斜杠\与原始字符串

Python本身处理字符串时,反斜杠用于转义字符,\\代表引用\本身;正则表达器查询\时,需要转义\本身,所以需要四个反斜杠\\\\(可以看成(\\)(\\))。也就是说,匹配\需要四个反斜杠\\\\。

反斜杠过多容易导致代码难以阅读,因为这个原因,Python在使用正则表达式最好使用原始字符串。

比如,正则字符串"\\w+\\d"改写成r"\w+\d",以此类推。

三、匹配方法

match()    判断正则表达式是否从开始处匹配一个字符串
search()   遍历字符串,找到第一个位置
findall()  遍历字符串,找到所有位置,并以列表形式返回
finditer() 遍历字符串,找到所有位置,并以迭代器形式返回
group()    返回匹配的字符串
start()    返回匹配的开始位置
end()      返回匹配的结束位置
span()     返回匹配位置

一个例子:

import re
p=re.compile('\w+')
p.match("")
print(p.match(""))
m=p.match('liangzuojiayi')
print(m)
print(m.group())
print(m.start())
print(m.end())
print(m.span())
print()
m0=p.match('~~~liangzuojiayi')#match()是从开始处匹配
print(m0)
m1=p.search('~~~liangzuojiayi')
print(m1)
print(m1.group())
print(m1.start())
print(m1.end())
print(m1.span())
print()
q=re.compile('\d+')
print(q.findall('1liang2zuo3jia4yi'))
iterator=q.finditer('1liang2zuo3jia4yi')
print(iterator)
for match in iterator:
    print(match.span())
结果显示:
None
<_sre.SRE_Match object; span=(0, 13), 
match='liangzuojiayi'>
liangzuojiayi
0
13
(0, 13)

None
<_sre.SRE_Match object; span=(3, 16), match='liangzuojiayi'>
liangzuojiayi
3
16
(3, 16)

['1', '2', '3', '4']
<callable_iterator object at 0x00000000093CC2B0>
(0, 1)
(6, 7)
(10, 11)
(14, 15)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值