python正則re模組

來源:互聯網
上載者:User

標籤:開頭   列表   列印   尋找   換行   除了   定製   sea   替換   

今日內容:

知識點一:正則
 什麼是正則:
  就是用一系列具有特殊含義的字元組成一套規則,改規則用來描述具有某一特徵的字串
  正則就是用來在一個大的字串中取出符合規則的小字串
  
 為什麼用正則:
  1.使用者註冊
  2.爬蟲程式
  
 如何用:
  re.findall
 
re.findall模組:

\w取字母、數字、底線
print(re.findall(‘\w‘,‘yangzz:age_18 ‘))
\W取非字母、數字、底線
print(re.findall(‘\W‘,‘yangzz:age_18 ‘))

\s匹配任意空白字串,等價於[\t\n\r\f]  t是一個table鍵
print(re.findall(‘\s‘,‘\tyangzz\n age_18  ‘))

\S匹配任意非Null 字元
print(re.findall(‘\S‘, ‘\tyangzz\n age_18  ‘))

\d匹配任一數字
print(re.findall(‘\d‘, ‘\tyangzz\n age_18  ‘))
\D匹配任意非數字
print(re.findall(‘\D‘, ‘\tyangzz\n age_18  ‘))

\n匹配一個分行符號
print(re.findall(‘\n‘, ‘\tyangzz\n age_18 aaa bb\nb ‘))

\t匹配一個定位字元
print(re.findall(‘\t‘, ‘\tyangzz\n age_18 aaa bb\nb ‘))


^取字串的開頭 (沒有返回空列表,從開頭第一個匹配)
print(re.findall(‘^yang‘, ‘yangzz\n age_18  yang aaa bb\nb ‘)) #[‘yang‘]

$匹配字串末尾
print(re.findall(‘b$‘, ‘yangzz\n age_18  yang aaa bb\nb‘)) #[‘b‘]

. 匹配任一字元,除了分行符號
print(re.findall(‘.‘, ‘yangzz\n age_18 *%& yang aaa bb\nb‘))

例如2 a.g其實是三位字元, .可以是任意非分行符號(後面加re.DOTALL中間也可以取到\n)
print(re.findall(‘a.g‘, ‘yangzz\n age_18 ang *%& yang aaa bb\nb‘)) #[‘ang‘, ‘ang‘]
print(re.findall(‘a.g‘, ‘ya\nngzz\n age_18 a\ng *%& yang aaa bb\nb‘,re.DOTALL)) #[‘a\ng‘, ‘ang‘]

[a,e,b]匹配[]limian
print(re.findall(‘[\n]‘, ‘yangzz\n age_18  yang aaa bb\nb‘))#[‘\n‘, ‘\n‘]
print(re.findall(‘[a,e,b]‘, ‘yangzz\n age_18  yangzhizong aaa bb\nb‘)) #[‘a‘, ‘a‘, ‘e‘, ‘a‘, ‘a‘, ‘a‘, ‘a‘, ‘b‘, ‘b‘, ‘b‘]

print(re.findall(‘y[a-z]n‘, ‘yangzz\n age_18 yan y1n yang aaa bb\nb‘))

取不再括弧中的字元
print(re.findall(‘[^z,a]‘, ‘yangzz‘))


*代表左邊的字元出現0次或者無窮次(條件一定要有a,b可有可無)
print(re.findall(‘an*‘, ‘yangzhizong mawenjie annd‘))  #[‘an‘, ‘a‘]


?代表左邊的字元出現0次或者1次(條件一定要有a,b有的話只取一個就行)
print(re.findall(‘an?‘, ‘yangzhizong mawenjie annd‘)) #[‘an‘, ‘a‘, ‘an‘]


+代表左邊的字元出現1次或者無窮次(條件一定要有a,b至少有一個)
print(re.findall(‘an+‘, ‘yangzhizong mawenjie annd‘)) #[‘an‘, ‘ann‘]

#匹配所有包含小數在內的數字
print(re.findall(‘\d+\.?\d*‘,"asdfasdf123as1.13dfa12adsf1asdf3")) #[‘123‘, ‘1.13‘, ‘12‘, ‘1‘, ‘3‘]

思路:\d 找數字 +表示左邊數字出現1次或者無窮次 ???


.*預設為貪婪匹配 (預設取從頭到尾取值)
print(re.findall(‘a.*b‘,‘a1b22222222b‘)) #[‘a1b22222222b‘]

.*?為非貪婪匹配:推薦使用
print(re.findall(‘a.*?b‘,‘a1b22222222b‘)) #[‘123‘, ‘1.13‘, ‘12‘, ‘1‘, ‘3‘]

{n,m}固定取值,碰到有的 取1個 和2個在一塊兒 分開組合
{0,2} 0開始的預設也會把其他列印但是現實為空白
print(re.findall(‘a{0,2}‘, ‘yangzzage18yangaaabbb‘)) #[‘‘, ‘a‘, ‘‘, ‘‘, ‘‘, ‘‘, ‘a‘, ‘‘, ‘‘, ‘‘, ‘‘, ‘‘, ‘‘, ‘a‘, ‘‘, ‘‘, ‘aa‘, ‘a‘, ‘‘, ‘‘, ‘‘, ‘‘]
print(re.findall(‘ab{1,}‘,‘abbb‘))  #[‘abbb‘]

print(re.findall(‘a[1*-]b‘,‘a1b a*b a-b‘))


[+-*/] 括弧內有加減乘除時,減號要放在左邊或者右邊 放中間的話只能前面加\ [+\-*/]代表將-轉譯為不同字元
print(re.findall(‘a[+\-*/]b‘,‘a12ba a++b a*b a-+b‘))

 


re.search()模組
只到找到第一個匹配然後返回一個包含匹配資訊的對象,該對象可以通過調用group()方法
得到匹配的字串,如果字串沒有匹配,則返回None。

print(re.findall(‘e‘,‘alex make love‘))
print(re.search(‘e‘,‘alex make love‘)) #<_sre.SRE_Match object; span=(2, 3), match=‘e‘>
print(re.search(‘e‘,‘alex make love‘).group())  # e

match從開頭進行尋找,沒有的話返回None
print(re.match(‘e‘,‘alex make love‘))


split分割 模組
[‘‘, ‘‘, ‘cd‘],先按‘a‘分割得到‘‘和‘bcd‘,再對‘‘和‘bcd‘分別按‘b‘分割
print(re.split(‘[ab]‘,‘abcd‘))


替換re.sub()模組
1.不加參數預設替換所有
print(re.sub(‘a‘,‘A‘,‘abcdeaedaer‘,1)) #Abcdeaedaer

替換subn(輸出可以顯示總共替換的個數)
print(re.subn(‘a‘,‘A‘,‘abcdeaedaer‘))

 

re.complie()模組
可以定製編譯,方便直接調用
obj=re.compile(‘\d{2}‘)
print(obj.search(‘ab123ee‘).group()) #12
print(obj.findall(‘ab123ee‘)) #[‘12‘]

python正則re模組

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.