關於python正則表達式的一些常見知識點

import re
pat="yue"
str="http://yum.qiqyue.com"
re.search(pat,str)
<_sre.SRE_Match object; span=(14, 17), match='yue'>
#如字符串沒有匹配對象
str2 = "http://yum.com"
print(re.search(pat,str2))
None
pat="好人"
str="大家好,好人"
re.search(pat,str)
<_sre.SRE_Match object; span=(4, 6), match='好人'>
#匹配非打印字符
pat2="\n"
str = '''jksfs
fafda'''
re.search(pat2,str)
<_sre.SRE_Match object; span=(5, 6), match='\n'>
#通用字符作爲原子,\w:字母、數字、下劃線;\d:一位的十進制數;\s:任意空白字符
#\W:任意除了字母、數字、下劃線;\D:相反;\S:相反
pat3="\w\dpython\w"
str='d12323python2'
re.search(pat3,str)
<_sre.SRE_Match object; span=(4, 13), match='23python2'>
str2="fafda"
str3="fafasfdsa2python2======"
print(re.search(pat3,str2))
print(re.search(pat3,str3))
None
<_sre.SRE_Match object; span=(8, 17), match='a2python2'>
#原子表:可以定義一組平等的原子。用[]定義
pat="pyth[oiy]n"
str="afasfpythonfdasfas"
print(re.search(pat,str))
<_sre.SRE_Match object; span=(5, 11), match='python'>
#元字符:特殊含義字符,比如某字符重複n次
#.:匹配任意字符;
#^:匹配字符串開始位置;
#$:匹配結束位置;
#*:匹配0次、一次、多次字符;
#?:匹配0次、一次;
#+:一次、多次
#{3}:前面的原子恰好出現3次
pat="t{3}"
str="atttaa"
print(re.search(pat,str))
print("++++++++++++++++++++++++")
#由於*可以匹配0次,所以一般在字符串開頭(默認)就進行匹配了
pat1="t*"
str1="aaaa"
print(re.search(pat1,str1))
print("++++++++++++++++++++++++")
pat2="$t*"
str2="wwwww"
print(re.search(pat2,str2))
<_sre.SRE_Match object; span=(1, 4), match='ttt'>
++++++++++++++++++++++++
<_sre.SRE_Match object; span=(0, 0), match=''>
++++++++++++++++++++++++
<_sre.SRE_Match object; span=(5, 5), match=''>
#t{n,}:t至少出現了n次
#t{n,m}:t至少出現n次,至多出現m次
#|:或
#():提取某一個內容
#例
pat='.python...'
str = 'a#pythonre$'
print(re.search(pat,str))
<_sre.SRE_Match object; span=(1, 11), match='#pythonre$'>
#會將第一匹配內容匹配出來
pat="python|java"
str = 'djava2323pythondfasf'
print(re.search(pat,str))
<_sre.SRE_Match object; span=(1, 5), match='java'>
#模式修正符:可以在不改變正則表達式的情況下,通過模式修正符改變表達式的含義
#I:忽略大小寫
#m:多行匹配
#L:本地化識別匹配
#U:根據Unix字符解析我們字符
#S:讓.也匹配換行符
pat1="python"
pat2="python"
str = 'djava2323Pythondfasf'
print(re.search(pat1,str))
print(re.search(pat2,str,re.I))
None
<_sre.SRE_Match object; span=(9, 15), match='Python'>
#貪婪模式:儘可能多的匹配
#懶惰模式:儘可能少的匹配
pat1="p.*n"#貪婪模式
pat2="p.*?n"#懶惰模式
str = 'dpynhondfnasf' 
print(re.search(pat1,str))
print(re.search(pat2,str,re.I))#更精確的定位
<_sre.SRE_Match object; span=(1, 10), match='pynhondfn'>
<_sre.SRE_Match object; span=(1, 4), match='pyn'>
#正則表達式函數
#re.mactch(),從頭開始進行匹配;re.search(),從任何位置開始匹配,只能匹配一個結果;全局匹配函數、re.sub()函數
print(re.match(pat1,str))
None
str = "phfsfsfsnad"
print(re.match(pat1,str))
<_sre.SRE_Match object; span=(0, 9), match='phfsfsfsn'>
pat1='p.*?y'
str = "hsdgspdfsafafasfafsdfypfasfasy"
print(re.search(pat1,str))
print(re.match(pat1,str))
<_sre.SRE_Match object; span=(5, 22), match='pdfsafafasfafsdfy'>
None
#全局匹配
print(re.compile(pat1).findall(str))
['pdfsafafasfafsdfy', 'pfasfasy']
#常見的正則示例
pat='[a-zA-Z]+://[^\s]*[.com|.cn]'
string='<a href="http://www.google.com">fasfadsf<\a>'
rst=re.compile(pat).findall(string)
print(rst)
['http://www.google.com']
#匹配電話號碼
pat='<title>(.*?)</title>'
import urllib.request
data=urllib.request.urlopen("https://edu.csdn.net/course/detail/3527").read()
print(re.compile(pat).findall(data.decode()))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章