正則表達式

正則表達式是一種用來匹配字符串的強有力的武器。它的設計思想是用一種描述性的語言來給字符串定義一個規則,凡是符合規則的字符串,我們就認為它‘匹配了’,否則,該字符串就是不合法的。

re模塊
  • match()方法判斷是否匹配,如果匹配成功,返回一個match對象,否則返回None。只能從字符串起始的位置去匹配
  • search()同match()方法, 但是會在整個字符串里去匹配,直到匹配到為止
import re
result1 = re.match('\d+','edvr4556t5gtbyh675454') 
print result1
if result1:
   print  result1.group()
else:
   print 'nothing'
result2 = re.search('\d+','edvr4556t5gtbyh675454') 
print result2
if result2:
   print result2.group()
else:
   print 'nothing'
#打印結果
None
nothing
<_sre.SRE_Match object at 0x01EF2918>
4556
#在字符串中用正則表達式\d+ 匹配數字,如果為真,返回匹配結果,否則返回nothing
  • findall()
    match()方法判斷是否匹配,如果匹配成功,返回一個match對象,否則返回None。會在整個字符串中匹配,并且找到所有的
import re
result3 = re.findall('\d+','ed111vr4556t5g333tbyh675454') 
print result3
#打印結果
['111', '4556', '5', '333', '675454']
  • compile 編譯,re模塊內部會干兩件事情
    1、編譯正則表達式,如果正則表達式的字符串本身不合法,會報錯;
    2、用編譯后的正則表達式去編譯字符串。
    如果一個正則表達式要是重復使用幾千次,出于效率的考慮,我們可以預編譯該正則表達式,接下來重復使用時就不需要編譯這個步驟了,直接匹配:
import re
com = re.compile('\d+')  #編譯
result1 = com.findall('123wed44444kll3333')
print result1
result2 = com.match('4343ds9090fg321').group()
print result2
result3 = com.search('asd8888frs2222').group()
print result3
#打印結果:
['123', '44444', '3333']
4343
8888
  • 分組groups
    分組就是用一對圓括號“()”括起來的正則表達式,匹配出來的內容就表示一個分組。從正則表達式的左邊開始看,看到第一個左括號“(”表示第一個分組,第二個表示第二個分組,以此類推,需要注意的是有一個全局分組(就是0),就是整個正則表達式。
import re
result2 = re.search('(\d+)asdfa(\d+)','as123asdfa335633sdeasdfdf')
print result2.group()
print result2.groups()   #groups只打印圓括號里的內容
#打印結果
123asdfa335633
('123', '335633')
  • 正則表達式的常用格式
    1、字符:
    \d :數字
    \w :下劃線、數字、字符
    \t :制表符
    . :除了回車以外的所有字符
    2、次數:
    * 大于等于零
    + 大于等于1
    ?0或者1
    {m} 次數,m次
    {m,n} 范圍,m到n之間的

  • 篩選IP,例子

import re
ip = '12.34.43.dsfa.345rs.354s~234sd389d+34f192.168.32.43_w342d~@#9436'
result1 = re.findall('[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}',ip)
print result1
result2 = re.findall('(?:\d{1,3}\.){3}\d{1,3}',ip)
print result2
#打印結果
['192.168.32.43']
['192.168.32.43']
  • 自學
    《正則表達式30分鐘教程》
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容