re(基本用法)

常用匹配规则,转载自《Python3网络爬虫开发实战》作者崔庆才,侵删。

\w		匹配字母、数字、下划线,等价于[a-zA-Z0-9_] \w可以匹配汉字(python),
\W		匹配不是字母、数字、下划线的其他字符
\s		匹配任意空白字符,等价于(\t\n\r\f)
\S		匹配任意非空字符
\d		匹配数字,等价于[0-9]
\D		匹配不是数字的字符
\A		匹配字符串开头
\Z		匹配字符串结尾的,如果存在换行,只匹配到换行前的结束字符串
\z		匹配字符串结尾的,如果存在换行,同时匹配换行符
\G		匹配最后完成匹配的位置
\n		匹配一个换行符
\t		匹配一个制表符(tab)
^		匹配一行字符串的开头
$		匹配一行字符串的结尾
.		匹配任意字符,除了换行符.当re.DOTALL标记被指定时,这可以匹配包括换行符在内的任字符
[]		用来表示一组字符,比如[abc]表示匹配a或b或c,[a-z],[0-9]
[^]	匹配不在[]里面的字符,比如[^abc]匹配除a,b,c以外的字符
*		匹配0个或多个字符
+		匹配1个或多个字符
?		匹配0个或1个前面的正则表达式片段,(.*?)表示尽可能少地匹配字符(后面详解)
{n}		精确匹配前面n个前面的表达式,如\d{5}表示匹配5个数字
{n,m}	匹配前面的表达式n到m次,贪婪模式
a|b		匹配a或者b
()		匹配括号里的表达式,也可以表示一个组
常用组合匹配规则:
.*:匹配0个或多个出换行符以外的任意字符

注:部分符号用于匹配时,如1433223@qq.com中的.需要加\(.),其他+、-等符号也如此。

re.match()
语法:
re.match(pattern,string,modifier)
其中pattern是正则表达式,string是要匹配的字符串,modifier是修饰符控制正则的匹配方式。

示例:

import re

string = 'Hello World!!! My Name is maTuoTuo'
pattern = '^Hello\s\S\S\S\S\S\S\S\S'
result = re.match(pattern,string)
print(result)  
上述程序结果:	<re.Match object; span=(0, 14), match='Hello World!!!'> 

match()方法有两个方法:
group() :输出匹配到的结果
span() :输出匹配的范围

一般匹配到的内容要使用提取出来使用,示例:

import re

string = 'Hello World!!! My Name is maTuoTuo'
pattern = '^Hello\s\S\S\S\S\S\S\S\S'
result = re.match(pattern,string)
strResult = result.group()
print(strResult)
上述程序结果:Hello World!!!

修饰符

re.I:使得匹配不区分大小写
re.L:做本地化识别匹配
re.M:多行匹配,对匹配开头^和结尾$有影响
re.S:使得.匹配包括换行符在内的所有字符
re.U:根据Unicode字符集解析字符
re.X:赋予更灵活的格式有助于正则表达式的理解

修饰符使用示例:

import re

string = '''Hello World!!!
	 My Name is maTuoTuo
	 teleponeNumber is 13838389438
	 just like peiqi'''
pattern = '^Hello.*?(\d+).*?peiqi'
result = re.match(pattern,string,re.S)
strResult = result.group()
strResultSecond = result.group(1)
print(strResult)
print(strResult)
上述程序结果:
Hello World!!!
         My Name is maTuoTuo
         teleponeNumber is 13838389438
         just like peiqi
13838389438

程序说明:
1.()内的表达式是一个组,可单独提取出来。
2.当设计到换行时,需要使用修饰符re.S使得能够匹配换行,避免错误。

转义符:\
说明:当匹配字符串中包含匹配符时,需要转义使其不产生匹配的作用。
示例:

import re

string = "Hello World!!! My Name is maTuoTuo(坨坨是猪猪怪) I'm hanhan"
pattern = '^Hello.*?\(坨坨是猪猪怪\)'
result = re.match(pattern,string)
strResult = result.group()
print(strResult)
上述程序结果:Hello World!!! My Name is maTuoTuo(坨坨是猪猪怪)

re.search()
说明:与match区别在于,match从头开始匹配,一旦字符串开始位置不符合正则表达式就会匹配失败;search匹配整个字符串。

示例

import re

string = "Hello World!!! My Name is maTuoTuo(坨坨是猪猪怪) I'm hanhan"
pattern = 'My.*?\(坨坨是猪猪怪\)'
result = re.search(pattern,string)
strResult = result.group()
print(strResult)
上述程序结果:My Name is maTuoTuo(坨坨是猪猪怪)

re.findall()
说明:当被匹配的字符串中有多个符合正则表达式时,使用re.findall()可以获得符合正则表达式的所有内容。
示例:

import re

string = """
    Hello World!!! My Name is maTuoTuo(坨坨是猪猪怪) I'm hanhan
    Hello World!!! My Name is tuoTuoMa(坨坨是猪猪怪) I'm hanhan
    Hello World!!! My Name is tuoMaMa(坨坨是猪猪怪) I'm hanhan
"""
pattern = 'My.*?\(坨坨是猪猪怪\)\s'
result = re.findall(pattern,string,re.S)
print(result)
上述程序结果:
['My Name is maTuoTuo(坨坨是猪猪怪) ', 'My Name is tuoTuoMa(坨坨是猪猪怪) ', 'My Name is tuoMaMa(坨坨是猪猪怪) '] 

re.sub()
语法:
re.sub(pattern,replace,string),
其中pattern是被替代的字符的正则表达式,replace是用于替换的字符,string是要匹配的字符串
说明:sub()的意义在于可以快速对匹配的字符串进行处理,比如去除掉字符串中的数字字符
示例:

import re

string = 'Hello World!!!My Name is maTuoTuo teleponeNumber is 13838389438 just a hanpi'
pattern = '\d+'
replace = "qiudoumode"
result = re.sub(pattern,replace,string,re.S)
print(result)

re.compile()
说明:compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。

语法:
re.compile(pattern,modifier),
其中pattern是正则表达式,modifier是修饰符。

示例:

>>>import re
>>> pattern = re.compile(r'\d+')                    # 用于匹配至少一个数字
>>> m = pattern.match('one12twothree34four')        # 查找头部,没有匹配
>>> print m
None
>>> m = pattern.match('one12twothree34four', 2, 10) # 从'e'的位置开始匹配,没有匹配
>>> print m
None
>>> m = pattern.match('one12twothree34four', 3, 10) # 从'1'的位置开始匹配,正好匹配
>>> print m                                         # 返回一个 Match 对象
<_sre.SRE_Match object at 0x10a42aac0>
>>> m.group(0)   # 可省略 0
'12'
>>> m.start(0)   # 可省略 0
3
>>> m.end(0)     # 可省略 0
5
>>> m.span(0)    # 可省略 0
(3, 5)
  • 15
    点赞
  • 127
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值