一只爬虫带你看世界【7】
11.正则表达式特殊符号及用法
正则表达式特殊符号主要有两部分构成,其一是元字符,其二是由”\”加上字母构成的。
元字符:
举个栗子:
>>>re.search(r'Fish(c|d)','Fishc')
<_sre.SRE_Matchobject; span=(0, 5), match='Fishc'>
>>>re.search(r'Fish(c|d)','Fishd')
<_sre.SRE_Matchobject; span=(0, 5), match='Fishd'>
>>>re.search(r'^Fish','Fishsdfa')
<_sre.SRE_Matchobject; span=(0, 4), match='Fish'>
>>>re.search(r'Fish$','asdfsdfFish')
<_sre.SRE_Matchobject; span=(7, 11), match='Fish'>
>>>re.search(r'(Fishc)\1','FishcFishc')
<_sre.SRE_Matchobject; span=(0, 10), match='FishcFishc'>
>>>re.search(r'[.]','I love Fish.com')
<_sre.SRE_Matchobject; span=(11, 12), match='.'>
>>>re.findall(r'[a-z]','FishC.com')
['i', 's', 'h','c', 'o', 'm']
>>>re.findall(r'[^a-z]','FishC.com')
['F', 'C', '.']
注意:[^a-z] 去反
>>> re.search(r'fishc{3}','fishcccc')
<_sre.SRE_Match object; span=(0, 7),match='fishccc'>
>>> re.search(r'(fishc){3}','fishcfishcfishc')
<_sre.SRE_Match object; span=(0, 15),match='fishcfishcfishc'>
查看下图:
贪婪匹配与非贪婪匹配
>>> s ="<html><title>I love you forever</title></html>"
>>>re.search(r'<.+>',s)
<_sre.SRE_Matchobject; span=(0, 47), match='<html><title>I love you forever</title></html>'>
>>>re.search(r'<.+?>',s)
<_sre.SRE_Matchobject; span=(0, 6), match='<html>'>
此时?是取消贪婪匹配的
模式对象
如果需要重复使用某个正则表达式,那么先将正则表达式编译成模式对象,使用“re.compile”方法编译。
举个栗子:
>>>import re
>>> p =re.compile(r'[A-Z]')
>>>type(p)
<class'_sre.SRE_Pattern'>
>>>p.search('I love you forver')
<_sre.SRE_Matchobject; span=(0, 1), match='I'>
>>>p.findall("I love you forver")
['I']
正则表达式严格匹配包括空格(search用法)
举个栗子:
>>>result = re.search(r' (\w+) (\w+)','I love you forever')
>>>result
<_sre.SRE_Matchobject; span=(1, 10), match=' love you'>
>>>result.group()
' love you'
>>>result.group(1)
'love'
>>>result.group(2)
'you'
>>>result.span()
(1, 10)