您的位置:首页 > 编程语言 > Python开发

Python3:正则表达式

2016-04-11 10:30 567 查看
正则表达式也称为 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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: