Python网络爬虫(二)---用正则表达式获取指定内容

正则表达式

正则表达式,通常写成regex,是用于识别正则字符串的,返回符合规定的字符串,正则字符串是可以用一系列线性规则构成的字符串。例如列了以下规则:
1.开头是字母‘a’;
2.结尾是字母‘b’;
满足上面两个规则的字符串可以是“azxczxcb”,也可以使"agfgfgb",满足的字符串可以有N多个,但字符串"bbb"就不满足,所以不会被匹配。
正则表达式包含了单个或多个“规则”,用各种符号字母来表示出来,以下是一些常用的正则表达式符号:

符号 含义 例子 匹配结果
* 匹配前面的字符,子表达式或者括号里的字符0次或多次 a * b * aaaaaa,bbbb,aaabbb
+ 匹配前面的字符,子表达式或者括号里的字符至少1次 a+b+ abbbb,ab,aaaab
[ ] 匹配中括号里的任意一个字符 [A-Z] A,B,C
( ) 表达式编组(括号中的会看成一个整体) (ab)* ab,abab
{m,n} 匹配前面的字符,子表达式或者括号里的字符m到n次 a{2,3} aa,aaa
[^] 取反,即匹配任意一个不在中括号中的字符 [^A-z] a,b
| 匹配任意一个用|分割的字符 a|b|c a,b,c
. 匹配任意一个单个字符 a.c abc,afc,agc
\ 转义字符 \.\|\\ .|\
\d 匹配任何十进制数字(\D相当于\d的取反操作) \d* 151213,123456
\w 匹配任何的字母数字字符(\W相当于\d的取反操作) \w+ 12asda,123ABC
\s 匹配任何空白字符空格,制表,回车(\S为\s的取反操作) \s

以上是比较常见的正则表达式中的符号及其含义,当我们通过爬虫获取一个文本文件时,想要再从中选取需要的部分,就可以使用正则表达式来帮助我们选取。

match

import re
str="abcd123456   789efgABC000"
pattern="\w+"
obj=re.match(pattern,str)
print(obj)

结果将输出,匹配到了字符“abcd123456”,但将代码改成

import re
str="abcd123456   789efgABC000"
pattern="\W+"
obj=re.match(pattern,str)
print(obj)

结果将输出None,这是因为match将会从字符串的开始位置找,开头找不到,那就返回None。

search
还是用上面那个代码,但把match改成search

import re
str="abcd123456   789efgABC000"
pattern="\W+"
obj=re.search(pattern,str)
print(obj)

结果将输出,匹配到了那几个空格,search根match的区别就在于,他可以从全文搜索,从起始位置一直往后找,找到了就返回,找不到就返回none,match和search都只会返回第一个被匹配到的地方。

sub
sub函数是用来将匹配到的内容替换成别的内容的函数,
re.sub(pattern,repl,string,count=0,flags=0)
pattern:正则表达式
repl:替换用的字符串
string:字符串
count:替换次数,默认为0,即全部替换
flags:正则表达式修饰符,见后面

import re
str="abcd123456   789efgABC000"
pattern="\W+"
obj=re.sub(pattern,"XXXX",str)
print(obj)

将上面匹配空格的代码改一下,结果输出abcd123456XXXX789efgABC000,空格被替换成了XXXX。

compile
re.compile(patttern),生成一个正则表达式对象

import re
str="abcd123456   789efgABC000"
pattern="\W+"
p=re.compile(pattern)
obj=p.sub("XXXX",str)
print(obj)

还是将上面的代码改一下,将正则表达式封装成一个对象,结果和之前一样。

findall
findall和search差不多,区别在于findall可以查找到所有匹配到的地方,search只能返回找到的第一处

import re
str="abcd123456   789efgABC000    123   456"
pattern="\W+"
obj=re.findall(pattern,str)
print(obj)

findall将结果以列表形式返回,[’ ', ’ ', ’ ']

finditer
和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

import re
str="abcd123456   789efgABC000    123   456"
pattern="\W+"
obj=re.finditer(pattern,str)
for i in obj:
    print(i)

结果:

正则表达式修饰符
前面提到的方法,都可以添加正则表达式修饰符,例如
re.match(pattern,string,flags=0)
re.search(pattern,string,flags=0)

常见的修饰符如下

re.I 忽略大小写(是字母i的大写不上l)
re.L 做本地化处理
re.M 多行模式
re.S 使.匹配能匹配换行符等任意字符
re.X 增加可读性
re.U 根据Unicode字符集解析字符
import re
str="abcd123456   789efgABC000    123   456"
pattern="abc"
obj=re.findall(pattern,str,re.I)
print(obj)

结果为[‘abc’, ‘ABC’]。

你可能感兴趣的:(python)