python正则表达式学习笔记

正则表达式:
import re #导入RE模块
pat="yue"
string="http://yum.iqianyue.com"
rst1=re.search(pat,string) --调用re模块的REARCH函数
print(rst1)
非打印字符:
\n换行
\t制表符,相当于一个TAB键
\转义字符

--换行符演示
>>> import re
>>> pat="\n"
>>> string3='''asdfdasfa
asdfadsfasd'''
>>> rst3=re.search(pat,string3)
>>> print(rst3)
<_sre.SRE_Match object; span=(9, 10), match='\n'>

通用字符作为原子:
\w 匹配任意一个字符,字符指字母,下划线或者数字,不能匹配特殊字符
\d 匹配任意一个阿拉伯数字
\s 匹配任意一个空白字符

\W匹配与\w以外的字符,
\D匹配与\d以外的字符,即匹配阿拉伯数字以外的字符
\S匹配空白字符以外的字符。
--\w演示
>>> pat3="\w\dpython\w"
>>> string="adsfasd7pythonasdf"
>>> rst3=re.search(pat3,string)
>>> print(rst3)
<_sre.SRE_Match object; span=(6, 15), match='d7pythona'>

原子表字符:
"pyth[jsz]n" 匹配上j,s,z其中一位字符,不能同时匹配其中两位字符

元字符
.匹配任意一位字符
^匹配字符串的开始的位置
[^j]匹配不是J,匹配j以外的
$匹配字符串结束的位置
*匹配零次一次多次字符 s* =ss 或者 s或者 sssss
?匹配零次或者一次字符
+匹配一次或多次字符 s+ =ss或sssss

{n}匹配前面的原子出现n次 t{6}=6个t
t{6,}前面的字符至少出现6次t
{n,m}前面的字符出现n到m次
|模式选择符 或者, 比如:t|s t或者s
()模式单元,提取括号里面的内容

-- .的演示
>>> pat=".python..."
>>> string="adsfapythonadfads"
>>> rst=re.search(pat,string)
>>> print(rst)
<_sre.SRE_Match object; span=(4, 14), match='apythonadf'>

--只匹配前面一个,因为php在前
>>> pat="python|php"
>>> string="abcdphp5267pythonjsadfsad"
>>> rst=re.search(pat,string)
>>> print(rst)
<_sre.SRE_Match object; span=(4, 7), match='php'>

模式修正符:
I忽略大小写
M多行匹配
L本地化识别匹配
U根据UNICODE字符解析我们的字符
S让.也匹配包括我们的换行符
--I的示例
>>> pat="python"
>>> string="adfdasfPythonadsfasd"
>>> rst=re.search(pat,string,re.I)
>>> print(rst)
<_sre.SRE_Match object; span=(7, 13), match='Python'>

贪婪模式,懒惰模式
>>> pat1="p.*y" #贪婪模式
>>> pat2="p.*?y" #懒惰模式
>>> string="abcdsdfpythonasfdpy"
>>> rst=re.search(pat1,string)
>>> print(rst)
<_sre.SRE_Match object; span=(7, 19), match='pythonasfdpy'>
>>> rst=re.search(pat2,string)
>>> print(rst)
<_sre.SRE_Match object; span=(7, 9), match='py'>

正则表达式函数
re.search从一串字符搜索
re.match从头开始匹配

--match函数应用
>>> pat1="p.*y"
>>> string="phasdfasdfadys"
>>> rst=re.match(pat1,string)
>>> print(rst)
<_sre.SRE_Match object; span=(0, 13), match='pyasdfasdfady'>

--全局搜索函数
>>> pat1="p.*?y"
>>> string="asdfphasdfadyasdpfasdasdfy"
>>> rst2=re.compile(pat1).findall(string)
>>> print(rst2)
['phasdfady', 'pfasdasdfy']

--匹配.CN或.com的网址
>>> pat="[a-zA-Z]+://[^\s]*[.com|cn]"
>>> string='<a href="http://www.baidu.com"></a>'
>>> rst2=re.compile(pat).findall(string)
>>> print(rst2)
['http://www.baidu.com']

--爬http://edu.csdn.net/huiyiCourse/detail/215的QQ
>>> pat="<p>(5.*?)</p>"
>>> import urllib.request
>>> data=urllib.request.urlopen("http://edu.csdn.net/huiyiCourse/detail/215").read()
>>> result=re.compile(pat).findall(str(data))
>>> print(result)
['521840835']

 

posted @ 2018-01-05 14:04  我是东风破  阅读(511)  评论(0)    收藏  举报