Python爬虫正则表达式常用符号和方法

注释:使用re之前,要导入re库文件。

(1). :匹配任意字符,换行符 \n 除外;每个 . 表示一个占位符。

例子:

a = 'xy123'
b = re.findall('x..',a)
print b

输出结果:

 

(2)*:匹配前一个字符的0次或无限次。

例子:

a = 'xxyxy123'
b = re.findall('x*',a)
print b

输出结果为:

 

 

(3)? :匹配前一个字符0次或1次。

例子:

a = 'xxyxy123'
b = re.findall('xy?',a)
print b

输出结果:

 

 

(4).* :贪心算法,尽可能的匹配多的字符。

例子:

secret_code = 'hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse'
b = re.findall('xx.*xx',secret_code)
print b

输出结果如下:

 

 

(5).*? :非贪心算法。

例子:

secret_code = 'hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse'
c = re.findall('xx.*?xx',secret_code)
print c

输出结果如下:

 

 

(6)() :括号内的数据作为结果返回。

例子:

secret_code = 'hadkfalifexxIxxfasdjifja134xxlovexx23345sdfxxyouxx8dfse'
d = re.findall('xx(.*?)xx',secret_code)
print d

输出结果:

 

 

(7) re.S的使用举例。在Python的正则表达式中,有一个参数为re.S。它表示“.”(不包含外侧双引号,下同)的作用扩展到整个字符串,包括“\n”。看如下代码:

import re
a = '''asdfsafhellopass:
    234455
    worldafdsf
    '''
b = re.findall('hello(.*?)world',a)
c = re.findall('hello(.*?)world',a,re.S)
print 'b is ' , b
print 'c is ' , c

输出结果如下:

 

正则表达式中,“.”的作用是匹配除“\n”以外的任何字符,也就是说,它是在一行中进行匹配。这里的“行”是以“\n”进行区分的。a字符串有每行的末尾有一个“\n”,不过它不可见。

如果不使用re.S参数,则只在每一行内进行匹配,如果一行没有,就换下一行重新开始,不会跨行。而使用re.S参数以后,正则表达式会将这个字符串作为一个整体,将“\n”当做一个普通的字符加入到这个字符串中,在整体中进行匹配。

 

(8)

re.findall(pattern, string[, flags]):搜索string,以列表形式返回全部能匹配的子串。

例子1:

pattern = re.compile(r'\d+')
print re.findall(pattern,'one1two2three3four4')

输出结果为:

 

例子2:

s2 = 'asdfxxIxx123xxlovexxdfd'
f2 = re.findall('xx(.*?)xx123xx(.*?)xx',s2)
print f2
print f2[0]

输出结果为:

 

 

(9) search的使用举例

例子:

s2 = 'asdfxxIxx123xxlovexxdfd'
f = re.search('xx(.*?)xx123xx(.*?)xx',s2)
print f.group()
print f.group(0)
print f.group(1)
print f.group(2)
print f.group(1,2)
print f.groups()

输出结果为:

 

 

group([group1, …]):

获得一个或多个分组截获的字符串;指定多个参数时将以元组形式返回。group1可以使用编号也可以使用别名;编号0代表整个匹配的子串;不填写参数时,返回group(0);没有截获字符串的组返回None;截获了多次的组返回最后一次截获的子串。

groups([default]):

以元组形式返回全部分组截获的字符串。相当于调用group(1,2,…last)。default表示没有截获字符串的组以这个值替代,默认为None。

 

(10) \d 的使用举例,\d用于匹配数字;\d+ 可以匹配数字字符串。

例子:

a = 'asdfasf1234567fasd555fas'
b = re.findall('(\d+)',a)
print b

输出结果:

 

 

(11)sub()方法

 

posted @ 2017-12-07 20:29  小糊涂也学要编程  阅读(1824)  评论(0编辑  收藏  举报