re模塊說明html
示例python
經常使用正則表達式正則表達式
########### 經常使用函數 ########### re.compile(pattern,flags=0) # 編譯正則表達式模式,返回一個對象的模式。(能夠把那些經常使用的正則表達式編譯成正則表達式對象,這樣能夠提升一點效率。) re.match(pattern, string, flags=0) # "決定RE是否在字符串剛開始的位置匹配。注:這個方法並非徹底匹配。當pattern結束時若string還有剩餘字符,仍然視爲成功。想要徹底匹配,能夠在表達式末尾加上邊界匹配符'$'" re.search(pattern, string, flags=0) # re.search函數會在字符串內查找模式匹配,只要找到第一個匹配而後返回,若是字符串沒有匹配,則返回None。 """ 注:match和search一旦匹配成功,就是一個match object對象,而match object對象有如下方法: group() 返回被 RE 匹配的字符串 start() 返回匹配開始的位置 end() 返回匹配結束的位置 span() 返回一個元組包含匹配 (開始,結束) 的位置 group() 返回re總體匹配的字符串,能夠一次輸入多個組號,對應組號匹配的字符串。 1.group()返回re總體匹配的字符串, 2.group (n,m) 返回組號爲n,m所匹配的字符串,若是組號不存在,則返回indexError異常 3.groups()groups() 方法返回一個包含正則表達式中全部小組字符串的元組,從 1 到所含的小組號,一般groups()不須要參數,返回一個元組,元組中的元就是正則表達式中定義的組。 """ re.findall(pattern, string, flags=0) # re.findall遍歷匹配,能夠獲取字符串中全部匹配的字符串,返回一個列表。 re.finditer(pattern, string, flags=0) # 搜索string,返回一個順序訪問每個匹配結果(Match對象)的迭代器。找到 RE 匹配的全部子串,並把它們做爲一個迭代器返回。 re.split(pattern, string[, maxsplit]) # "按照可以匹配的子串將string分割後返回列表。可使用re.split來分割字符串,如:re.split(r'\s+', text);將字符串按空格分割成一個單詞列表。" re.sub(pattern, repl, string, count) # 使用re替換string中每個匹配的子串後返回替換後的字符串。 re.subn(pattern, repl, string, count=0, flags=0) # 返回替換次數
########### flag位,匹配模式 ########### re.S(DOTALL) # 使.匹配包括換行在內的全部字符 re.I(IGNORECASE) # 忽略大小寫 re.L(LOCALE) # 使預約字符類 \w \W \b \B \s \S 取決於當前區域設定 re.M(MULTILINE) # 多行匹配,影響^和$ re.X(VERBOSE) # 詳細模式。這個模式下正則表達式能夠是多行,忽略空白字符,並能夠加入註釋。 re.U # 使預約字符類 \w \W \b \B \s \S \d \D 取決於unicode定義的字符屬性
re模塊中compile用於生成pattern的對象,再經過調用pattern實例的match方法處理文本最終得到match實例;經過使用match得到信息;
windows
import re # 將正則表達式編譯成Pattern對象 pattern = re.compile(r'rlovep') # 使用Pattern匹配文本,得到匹配結果,沒法匹配時將返回None m = pattern.match('rlovep.com') s = pattern.search('rlovep.com') f = pattern.findall('rlovep.com') if m: # 使用Match得到分組信息 print(m.group()) ### 輸出 ### # rlovep if s: # 使用Search得到分組信息 print(s.group()) ### 輸出 ### # rlovep print(f) # ['rlovep']
re.match:只匹配字符串的開始,若是字符串開始不符合正則表達式,則匹配失敗,函數返回None。ide
re.search:匹配整個字符串,直到找到一個匹配,返回該字符串。函數
re.findall:匹配整個字符串,返回列表。編碼
a=re.search('[\d]',"abc33").group() print(a) p=re.match('[\d]',"abc33") print(p) b=re.findall('[\d]',"abc33") print(b) 執行結果: None ['3', '3']
*?,+?,??,{m,n}? 前面的*,+,?等都是貪婪匹配,也就是儘量匹配,後面加?號使其變成惰性匹配url
a = re.findall(r"a(\d+?)",'a23b') # 非貪婪匹配 print(a) b = re.findall(r"a(\d+)",'a23b') print(b) 執行結果: ['2'] ['23'] a = re.match('<(.*)>','<H1>title<H1>').group() print(a) b = re.match('<(.*?)>','<H1>title<H1>').group() print(b) 執行結果: <H1>title<H1> <H1>
print(re.split('a','1A1a2A3',re.I))#輸出結果並未能區分大小寫 這是由於re.split(pattern,string,maxsplit,flags)默認是四個參數,當咱們傳入的三個參數的時候,系統會默認re.I是第三個參數,因此就沒起做用。若是想讓這裏的re.I起做用,寫成flags=re.I便可。
# =================================匹配模式================================= #一對一的匹配 # 'hello'.replace(old,new) # 'hello'.find('pattern') #正則匹配 import re #\w與\W print(re.findall('\w','hello egon 123')) #['h', 'e', 'l', 'l', 'o', 'e', 'g', 'o', 'n', '1', '2', '3'] print(re.findall('\W','hello egon 123')) #[' ', ' '] #\s與\S print(re.findall('\s','hello egon 123')) #[' ', ' ', ' ', ' '] print(re.findall('\S','hello egon 123')) #['h', 'e', 'l', 'l', 'o', 'e', 'g', 'o', 'n', '1', '2', '3'] #\n \t都是空,均可以被\s匹配 print(re.findall('\s','hello \n egon \t 123')) #[' ', '\n', ' ', ' ', '\t', ' '] #\n與\t print(re.findall(r'\n','hello egon \n123')) #['\n'] print(re.findall(r'\t','hello egon\t123')) #['\t'] #\d與\D print(re.findall('\d','hello egon 123')) #['1', '2', '3'] print(re.findall('\D','hello egon 123')) #['h', 'e', 'l', 'l', 'o', ' ', 'e', 'g', 'o', 'n', ' '] #\A與\Z print(re.findall('\Ahe','hello egon 123')) #['he'],\A==>^ print(re.findall('123\Z','hello egon 123')) #['he'],\Z==>$ #^與$ print(re.findall('^h','hello egon 123')) #['h'] print(re.findall('3$','hello egon 123')) #['3'] # 重複匹配:| . | * | ? | .* | .*? | + | {n,m} | #. print(re.findall('a.b','a1b')) #['a1b'] print(re.findall('a.b','a1b a*b a b aaab')) #['a1b', 'a*b', 'a b', 'aab'] print(re.findall('a.b','a\nb')) #[] print(re.findall('a.b','a\nb',re.S)) #['a\nb'] print(re.findall('a.b','a\nb',re.DOTALL)) #['a\nb']同上一條意思同樣 #* print(re.findall('ab*','bbbbbbb')) #[] print(re.findall('ab*','a')) #['a'] print(re.findall('ab*','abbbb')) #['abbbb'] #? print(re.findall('ab?','a')) #['a'] print(re.findall('ab?','abbb')) #['ab'] #匹配全部包含小數在內的數字 print(re.findall('\d+\.?\d*',"asdfasdf123as1.13dfa12adsf1asdf3")) #['123', '1.13', '12', '1', '3'] #.*默認爲貪婪匹配 print(re.findall('a.*b','a1b22222222b')) #['a1b22222222b'] #.*?爲非貪婪匹配:推薦使用 print(re.findall('a.*?b','a1b22222222b')) #['a1b'] #+ print(re.findall('ab+','a')) #[] print(re.findall('ab+','abbb')) #['abbb'] #{n,m} print(re.findall('ab{2}','abbb')) #['abb'] print(re.findall('ab{2,4}','abbb')) #['abbb'] print(re.findall('ab{1,}','abbb')) #'ab{1,}' ===> 'ab+' ['abbb'] print(re.findall('ab{0,}','abbb')) #'ab{0,}' ===> 'ab*' ['abbb'] #[] print(re.findall('a[1*-]b','a1b a*b a-b')) #[]內的都爲普通字符了,且若是-沒有被轉意的話,應該放到[]的開頭或結尾 ['a1b', 'a*b', 'a-b'] print(re.findall('a[^1*-]b','a1b a*b a-b a=b')) #[]內的^表明的意思是取反,因此結果爲['a=b'] print(re.findall('a[0-9]b','a1b a*b a-b a=b')) #結果爲['a1b'] print(re.findall('a[a-z]b','a1b a*b a-b a=b aeb')) #結果爲['aeb'] print(re.findall('a[a-zA-Z]b','a1b a*b a-b a=b aeb aEb')) #結果爲['aeb', 'aEb'] #\# print(re.findall('a\\c','a\c')) #對於正則來講a\\c確實能夠匹配到a\c,可是在python解釋器讀取a\\c時,會發生轉義,而後交給re去執行,因此拋出異常 print(re.findall(r'a\\c','a\c')) #r表明告訴解釋器使用rawstring,即原生字符串,把咱們正則內的全部符號都當普通字符處理,不要轉義['a\\c'] print(re.findall('a\\\\c','a\c')) #同上面的意思同樣,和上面的結果同樣都是['a\\c'] #():分組 print(re.findall('ab+','ababab123')) #['ab', 'ab', 'ab'] print(re.findall('(ab)+123','ababab123')) #['ab'],匹配到末尾的ab123中的ab print(re.findall('(?:ab)+123','ababab123')) #findall的結果不是匹配的所有內容,而是組內的內容,?:可讓結果爲匹配的所有內容['ababab123'] print(re.findall('href="(.*?)"','<a href="http://www.baidu.com">點擊</a>'))#['http://www.baidu.com'] print(re.findall('href="(?:.*?)"','<a href="http://www.baidu.com">點擊</a>'))#['href="http://www.baidu.com"'] print(re.findall(r'-?\d+\.?\d*',"1-12*(60+(-40.35/5)-(-4*3))")) #找出全部數字['1', '-12', '60', '-40.35', '5', '-4', '3'] #使用|,先匹配的先生效,|左邊是匹配小數,而findall最終結果是查看分組,全部即便匹配成功小數也不會存入結果 #而不是小數時,就去匹配(-?\d+),匹配到的天然就是,非小數的數,在此處即整數 print(re.findall(r"-?\d+\.\d*|(-?\d+)","1-2*(60+(-40.35/5)-(-4*3))")) #找出全部整數['1', '-2', '60', '', '5', '-4', '3'] #| print(re.findall('compan(?:y|ies)','Too many companies have gone bankrupt, and the next one is my company')) # ['companies', 'company'] # ?P<name> print(re.findall("<(?P<tag_name>\w+)>\w+</(?P=tag_name)>","<h1>hello</h1>")) #['h1'] print(re.search("<(?P<tag_name>\w+)>\w+</(?P=tag_name)>","<h1>hello</h1>").group()) #<h1>hello</h1> print(re.search("<(?P<tag_name>\w+)>\w+</(?P=tag_name)>","<h1>hello</h1>").groupdict()) #<h1>hello</h1> print(re.search(r"<(\w+)>\w+</(\w+)>","<h1>hello</h1>").group()) print(re.search(r"<(\w+)>\w+</\1>","<h1>hello</h1>").group())
# ===========================re模塊提供的方法介紹=========================== import re #1 print(re.findall('e','alex make love') ) #['e', 'e', 'e'],返回全部知足匹配條件的結果,放在列表裏 #2 print(re.search('e','alex make love').group()) #e,只到找到第一個匹配而後返回一個包含匹配信息的對象,該對象能夠經過調用group()方法獲得匹配的字符串,若是字符串沒有匹配,則返回None。 #3 print(re.match('e','alex make love')) #None,同search,不過在字符串開始處進行匹配,徹底能夠用search+^代替match #4 print(re.split('[ab]','abcd')) #['', '', 'cd'],先按'a'分割獲得''和'bcd',再對''和'bcd'分別按'b'分割 #5 print('===>',re.sub('a','A','alex make love')) #===> Alex mAke love,不指定n,默認替換全部 print('===>',re.sub('a','A','alex make love',1)) #===> Alex make love print('===>',re.sub('a','A','alex make love',2)) #===> Alex mAke love print('===>',re.sub('^(\w+)(.*?\s)(\w+)(.*?\s)(\w+)(.*?)$',r'\5\2\3\4\1','alex make love')) #===> love make alex print('===>',re.subn('a','A','alex make love')) #===> ('Alex mAke love', 2),結果帶有總共替換的個數 #6 obj=re.compile('\d{2}') print(obj.search('abc123eeee').group()) #12 print(obj.findall('abc123eeee')) #['12'],重用了obj
import re # re.S 使.能匹配換行符 content='''Hello 123456 World_This is a Regex Demo ''' res=re.match('He.*?(\d+).*?Demo$',content) print(res) #輸出None res=re.match('He.*?(\d+).*?Demo$',content,re.S) #re.S讓.能夠匹配換行符 print(res) # <_sre.SRE_Match object; span=(0, 39), match='Hello 123456 World_This\nis a Regex Demo'> print(res.group(1)) # 123456 # re.I 忽略大小寫 content="""Hello World""" print(re.findall("hello world",content)) # [] print(re.findall("hello world",content,flags=re.I)) # ['Hello World'] print(re.findall("HELLO WORLD",content,flags=re.I)) # ['Hello World'] # 使用多個flags,在flag之間使用| content="""Hello World I am the KING""" print(re.findall("hel.*ing",content)) # [] print(re.findall("hel.*ing",content,flags=re.I)) # [] print(re.findall("hel.*ing",content,flags=re.S)) # [] print(re.findall("hel.*ing",content,flags=re.S|re.I)) # ['Hello World\nI am the KING'] # re.M 把字符串視爲多行,從而^匹配每一行的行首,$匹配每一行的行尾 content = '''i am boy you are girl he is man''' print(re.findall(r"\w+$",content)) # ['man'] print(re.findall(r"\w+$",content,flags=re.M)) # ['boy', 'girl', 'man'] # re.X 正則表達式可爲多行,忽略空格,可加備註 content = '''i am boy 123123123 he is man''' print(re.findall("""[a-z\s]+ # 這個是什麼 [\d\s]+ # 匹配第二行的數字 [a-z\s]+ # 這個是什麼 """,content,flags=re.X)) # ['i am boy\n123123123\nhe is man']
1、校驗數字的表達式 1 數字:^[0-9]*$ 2 n位的數字:^\d{n}$ 3 至少n位的數字:^\d{n,}$ 4 m-n位的數字:^\d{m,n}$ 5 零和非零開頭的數字:^(0|[1-9][0-9]*)$ 6 非零開頭的最多帶兩位小數的數字:^([1-9][0-9]*)+(.[0-9]{1,2})?$ 7 帶1-2位小數的正數或負數:^(-)?\d+(.\d{1,2})?$ 8 正數、負數、和小數:^(-|+)?\d+(.\d+)?$ 9 有兩位小數的正實數:^[0-9]+(.[0-9]{2})?$ 10 有1~3位小數的正實數:^[0-9]+(.[0-9]{1,3})?$ 11 非零的正整數:^[1-9]\d$ 或 ^([1-9][0-9]){1,3}$ 或 ^+?[1-9][0-9]*$ 12 非零的負整數:^-[1-9][]0-9"$ 或 ^-[1-9]\d$ 13 非負整數:^\d+$ 或 ^[1-9]\d*|0$ 14 非正整數:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$ 15 非負浮點數:^\d+(.\d+)?$ 或 ^[1-9]\d.\d|0.\d[1-9]\d|0?.0+|0$ 16 非正浮點數:^((-\d+(.\d+)?)|(0+(.0+)?))$ 或 ^(-([1-9]\d.\d|0.\d[1-9]\d))|0?.0+|0$ 17 正浮點數:^[1-9]\d.\d|0.\d[1-9]\d$ 或 ^(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9]))$ 18 負浮點數:^-([1-9]\d.\d|0.\d[1-9]\d)$ 或 ^(-(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9])))$ 19 浮點數:^(-?\d+)(.\d+)?$ 或 ^-?([1-9]\d.\d|0.\d[1-9]\d|0?.0+|0)$ 2、校驗字符的表達式 1 漢字:^[\u4e00-\u9fa5]{0,}$ 2 英文和數字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$ 3 長度爲3-20的全部字符:^.{3,20}$ 4 由26個英文字母組成的字符串:^[A-Za-z]+$ 5 由26個大寫英文字母組成的字符串:^[A-Z]+$ 6 由26個小寫英文字母組成的字符串:^[a-z]+$ 7 由數字和26個英文字母組成的字符串:^[A-Za-z0-9]+$ 8 由數字、26個英文字母或者下劃線組成的字符串:^\w+$ 或 ^\w{3,20}$ 9 中文、英文、數字包括下劃線:^[\u4E00-\u9FA5A-Za-z0-9_]+$ 10 中文、英文、數字但不包括下劃線等符號:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$ 11 能夠輸入含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+ 12 禁止輸入含有~的字符:[^~\x22]+ 3、特殊需求表達式 1 Email地址:^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$ 2 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.? 3 InternetURL:[a-zA-z]+://[^\s] 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=])?$ 4 手機號碼:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$ 5 電話號碼("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^((\d{3,4}-)|\d{3.4}-)?\d{7,8}$ 6 國內電話號碼(0511-440522二、021-87888822):\d{3}-\d{8}|\d{4}-\d{7} 7 身份證號(15位、18位數字):^\d{15}|\d{18}$ 8 短身份證號碼(數字、字母x結尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$ 9 賬號是否合法(字母開頭,容許5-16字節,容許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 10 密碼(以字母開頭,長度在6~18之間,只能包含字母、數字和下劃線):^[a-zA-Z]\w{5,17}$ 11 強密碼(必須包含大小寫字母和數字的組合,不能使用特殊字符,長度在8-10之間):^(?=.\d)(?=.[a-z])(?=.*[A-Z]).{8,10}$ 12 日期格式:^\d{4}-\d{1,2}-\d{1,2} 13 一年的12個月(01~09和1~12):^(0?[1-9]|1[0-2])$ 14 一個月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$ 15 錢的輸入格式: 16 1.有四種錢的表示形式咱們能夠接受:"10000.00" 和 "10,000.00", 和沒有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$ 17 2.這表示任意一個不以0開頭的數字,可是,這也意味着一個字符"0"不經過,因此咱們採用下面的形式:^(0|[1-9][0-9]*)$ 18 3.一個0或者一個不以0開頭的數字.咱們還能夠容許開頭有一個負號:^(0|-?[1-9][0-9]*)$ 19 4.這表示一個0或者一個可能爲負的開頭不爲0的數字.讓用戶以0開頭好了.把負號的也去掉,由於錢總不能是負的吧.下面咱們要加的是說明可能的小數部分:^[0-9]+(.[0-9]+)?$ 20 5.必須說明的是,小數點後面至少應該有1位數,因此"10."是不經過的,可是 "10" 和 "10.2" 是經過的:^[0-9]+(.[0-9]{2})?$ 21 6.這樣咱們規定小數點後面必須有兩位,若是你認爲太苛刻了,能夠這樣:^[0-9]+(.[0-9]{1,2})?$ 22 7.這樣就容許用戶只寫一位小數.下面咱們該考慮數字中的逗號了,咱們能夠這樣:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$ 23 8.1到3個數字,後面跟着任意個 逗號+3個數字,逗號成爲可選,而不是必須:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$ 24 備註:這就是最終結果了,別忘了"+"能夠用"*"替代若是你以爲空字符串也能夠接受的話(奇怪,爲何?)最後,別忘了在用函數時去掉去掉那個反斜槓,通常的錯誤都在這裏 25 xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\.[x|X][m|M][l|L]$ 26 中文字符的正則表達式:[\u4e00-\u9fa5] 27 雙字節字符:[^\x00-\xff] (包括漢字在內,能夠用來計算字符串的長度(一個雙字節字符長度計2,ASCII字符計1)) 28 空白行的正則表達式:\n\s*\r (能夠用來刪除空白行) 29 HTML標記的正則表達式:<(\S?)[^>]>.?</\1>|<.? /> (網上流傳的版本太糟糕,上面這個也僅僅能部分,對於複雜的嵌套標記依舊無能爲力) 30 首尾空白字符的正則表達式:^\s|\s$或(^\s)|(\s$) (能夠用來刪除行首行尾的空白字符(包括空格、製表符、換頁符等等),很是有用的表達式) 31 騰訊QQ號:[1-9][0-9]{4,} (騰訊QQ號從10000開始) 32 中國郵政編碼:[1-9]\d{5}(?!\d) (中國郵政編碼爲6位數字) 33 IP地址:\d+.\d+.\d+.\d+ (提取IP地址時有用) 34 IP地址:((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))
1 . 校驗密碼強度 密碼的強度必須是包含大小寫字母和數字的組合,不能使用特殊字符,長度在8-10之間。 ^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$ 2. 校驗中文 字符串僅能是中文。 ^[\\u4e00-\\u9fa5]{0,}$ 3. 由數字、26個英文字母或下劃線組成的字符串 ^\\w+$ 4. 校驗E-Mail 地址 同密碼同樣,下面是E-mail地址合規性的正則檢查語句。 [\\w!#$%&'*+/=?^_`{|}~-]+(?:\\.[\\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\\w](?:[\\w-]*[\\w])?\\.)+[\\w](?:[\\w-]*[\\w])? 5. 校驗身份證號碼 下面是身份證號碼的正則校驗。15 或 18位。 15位: ^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$ 18位: ^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$ 6. 校驗日期 「yyyy-mm-dd「 格式的日期校驗,已考慮平閏年。 ^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$ 7. 校驗金額 金額校驗,精確到2位小數。 ^[0-9]+(.[0-9]{2})?$ 8. 校驗手機號 下面是國內 1三、15、18開頭的手機號正則表達式。(可根據目前國內收集號擴展前兩位開頭號碼) ^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$ 9. 判斷IE的版本 IE目前還沒被徹底取代,不少頁面仍是須要作版本兼容,下面是IE版本檢查的表達式。 ^.*MSIE [5-8](?:\\.[0-9]+)?(?!.*Trident\\/[5-9]\\.0).*$ 10. 校驗IP-v4地址 IP4 正則語句。 \\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b 11. 校驗IP-v6地址 IP6 正則語句。 (([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])) 12. 檢查URL的前綴 應用開發中不少時候須要區分請求是HTTPS仍是HTTP,經過下面的表達式能夠取出一個url的前綴而後再邏輯判斷。 if (!s.match(/^[a-zA-Z]+:\\/\\//)) { s = 'http://' + s; } 13. 提取URL連接 下面的這個表達式能夠篩選出一段文本中的URL。 ^(f|ht){1}(tp|tps):\\/\\/([\\w-]+\\.)+[\\w-]+(\\/[\\w- ./?%&=]*)? 14. 文件路徑及擴展名校驗 驗證windows下文件路徑和擴展名(下面的例子中爲.txt文件) ^([a-zA-Z]\\:|\\\\)\\\\([^\\\\]+\\\\)*[^\\/:*?"<>|]+\\.txt(l)?$ 15. 提取Color Hex Codes 有時須要抽取網頁中的顏色代碼,可使用下面的表達式。 ^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$ 16. 提取網頁圖片 倘若你想提取網頁中全部圖片信息,能夠利用下面的表達式。 \\< *[img][^\\\\>]*[src] *= *[\\"\\']{0,1}([^\\"\\'\\ >]*) 17. 提取頁面超連接 提取html中的超連接。 (<a\\s*(?!.*\\brel=)[^>]*)(href="https?:\\/\\/)((?!(?:(?:www\\.)?'.implode('|(?:www\\.)?', $follow_list).'))[^"]+)"((?!.*\\brel=)[^>]*)(?:[^>]*)> 18. 查找CSS屬性 經過下面的表達式,能夠搜索到相匹配的CSS屬性。 ^\\s*[a-zA-Z\\-]+\\s*[:]{1}\\s[a-zA-Z0-9\\s.#]+[;]{1} 19. 抽取註釋 若是你須要移除HMTL中的註釋,可使用以下的表達式。 <!--(.*?)--> 20. 匹配HTML標籤 經過下面的表達式能夠匹配出HTML中的標籤屬性。 <\\/?\\w+((\\s+\\w+(\\s*=\\s*(?:".*?"|'.*?'|[\\^'">\\s]+))?)+\\s*|\\s*)\\/?>
https://www.cnblogs.com/tina-python/p/5508402.htmlspa