正则表达式(regular expression)
关于这个知识点菜鸟教程上介绍的很详细
还有一个是介绍各种语言的正则表达式的
- 正则表达式是一个特殊的字符序列,利用事先定义好的一些特定字符以及它们的组合组成一个“规则”,检查一个字符串是否与这种规则匹配来实现对字符的进行过滤。
- 正则表达式是字符串处理的有力工具,但是并不是Python独有的,其他语言也有。
- Python中,re模块提供了正则表达式操作所需要的功能。 re - Support for regular expressions
- 构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。
- 正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
下面介绍一些常用的格式
-
普通字符:直接匹配
例如'abc'
匹配'abcde'
中的 'abc
' -
枚举字符集:由 [xyz] 括起来的字符集合,匹配[]中的任意字符
a[bd]c
匹配'abcdefadc'
中的'abc'
或者'adc'
-
否定枚举字符集:[^xyz],匹配不在[]中的任意字符
a[^bc]c
匹配字符串'abcdefadc'中的'adc'
-
预定义字符\w: 匹配单词字符<等价于 [a-zA-Z0-9]
-
预定义字符\W: 匹配非单词字符,等价于[^a-zA-Z0-9]
-
重复限定符X+ X重复1次或多次
'ab+'
可以匹配'ab'
或者'abb'
或者'abbb'
但不匹配'a'
通过 re 模块中的函数创建和使用正则表达式,对字符串进行匹配
re.findall (pattern, string) 返回匹配结果列表
re.sub (pattern, repl,string ) 返回替换后的字符串
re.split (pattern, string) 返回分隔后的字符串列表,其中pattern为分隔符模式
爬虫中用到的 正则表达式 和 re模块中的函数
.
表示除了换行符以外的任意字符
\S
表示除了空白符以外的任意字符
*
匹配*
之前的字符或者子模式的0次或者多次
+
匹配+
之前的字符或者子模式的1次或者多次
?
匹配位于?
之前的0个或者1个字符
贪心模式和非贪心模式
当?
紧随其它限定符*
、+
、{n}
、{n,}
、{n,m}
之后时,匹配模式是“非贪心的”。“非贪心的”模式匹配搜索到的、尽可能短的字符串,而默认的“贪心的”模式匹配搜索到的、尽可能长的字符串。
re中的方法比较多,在此就记下用到的
re.S可以影响到.
的行为,使得.
也可以匹配换行符
re.compile(pattern,[,flags])
创建模式对象
示例如下
contentpat='<div class="threadlist_lz clearfix">(.*?)</div>'
contentlist=re.compile(contentpat,re.S).findall(data)