网络爬虫(8)-正则表达式

1.常用匹配规则

\w 		匹配字母数字及下划线
\W 		匹配f非字母数字下划线
\s 		匹配任意空白字符,等价于[\t\n\r\f]
\S 		匹配任意非空字符
\d 		匹配任意数字
\D 		匹配任意非数字
\A 		匹配字符串开始
\Z 		匹配字符串结束,如果存在换行,只匹配换行前的结束字符串
\z 		匹配字符串结束
\G 		匹配最后匹配完成的位置
\n 		匹配一个换行符
\t 		匹配一个制表符
^ 		匹配字符串的开头
$ 		匹配字符串的末尾
. 		匹配任意字符,除了换行符,re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符
[....] 	用来表示一组字符,单独列出:[amk]匹配a,m或k
[^...] 	不在[]中的字符:[^abc]匹配除了a,b,c之外的字符
* 		匹配0个或多个的表达式
+ 		匹配1个或者多个的表达式
? 		匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
{n} 	精确匹配n前面的表示
{m,m} 	匹配n到m次由前面的正则表达式定义片段,贪婪模式
a|b 	匹配a或者b
() 		匹配括号内的表达式,也表示一个组

2.常用正则方法

1)match()方法
从字符串的起始位置匹配一个模式,如果不是起始位置匹配的话,match()就会返回None

语法格式:re.match(pattern,string,flags=0)

result.group()获取匹配的结果,result.span()获去匹配字符串的长度范围

import re

content= "hello 123 4567 World_This is a regex Demo"
result = re.match('^hello\s\d\d\d\s\d{4}\s\w{10}.*Demo$',content)
print(result)
print(result.group())
print(result.span())

匹配模式

re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响^和$
re.S 使.匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响\w、\W、 \b和\B
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解

很多时候匹配的内容是存在换行的问题的,这个时候的就需要用到匹配模式re.S来匹配换行的内容

import re

content = """hello 123456 world_this
my name is zhaofan
"""
result =re.match('^he.*?(\d+).*?zhaofan$',content,re.S)
print(result)
print(result.group())
print(result.group(1))

2)search()方法
在匹配时会扫描整个字符串,然后返回第一个成功匹配的结果。re.search(正则表达式,原字符串)

3)findall()方法
搜索整个字符串,然后返回匹配正则表达式的所有内容。re.findall(正则表达式,原字符串)

4)sub()方法
将一串文本中的所有数字都去掉。re.sub(正则表达式,替换成的字符串,原字符串)

5)compile()方法
将正则字符串编译成正则表达式对象,以便在后面的匹配中复用。

import re

content= """
  hello 12345 world_this   123 fan """ pattern =re.compile("hello.*fan",re.S) result = re.match(pattern,content) print(result) print(result.group())

6)split()方法
将字符串用给定的正则表达式匹配的字符串进行分割,分割后返回结果list。

posted @ 2019-08-02 00:23  麦小秋  阅读(215)  评论(0编辑  收藏  举报