^
的用法^一般用在字符串匹配模式的開頭,^表示以某一個字符開頭,如:^a表示匹配的字符串必須以a開頭。正則表達式
.
和*
的用法.表示匹配任意一個字符,*表示出現0次或屢次,例如:^a.*表示,匹配的字符串須要以a開頭,而且後面能夠是0個或者多個任意字符。code
$
字符的用法$字符通常用在匹配模式的結尾,表明匹配的字符串須要之前面的那個字符結尾。例如:^a.*6$表示,匹配的字符串須要以a開頭,後面是0個或者多個任意字符,而且要以6結尾。utf-8
?
的常見用法正則表達式一般是一種貪婪的匹配方式,而?表明了一種非貪婪的匹配模式。能夠表示重複前面的內容0次或1次,也就是要麼不出現要麼出現一次。例如:line = "sucansssoooo1226",如今,須要找出從第一個s到第二個s之間的內容。字符串
line = "sucansssoooo1226" reg_str = ".*(s.*s).*" match_obj = re.match(reg_str,line) if match_obj: print(match_obj.group(1))
在上面的代碼中,咱們獲得的結果是:ss。這正是由於正則表達式貪婪匹配的結果。正則表達式會一直匹配到最後符合要求的結果。下面咱們修改匹配模式import
reg_str = ".*?(s.*s).*"
修改以後,咱們獲得的結果是:sucansss。在第一個量詞*後面加上?表示,找到第一個s的時候,就記下來,可是後面,仍是一種貪婪匹配的模式,會一直日後找到s。繼續修改匹配模式coding
reg_str = ".*?(s.*?s).*"
這時候的輸出結果是:sucans。表示已經獲得了想要的結果。第二個問號表示,在找到第二個s的時候,就中止匹配,這就是一種非貪婪的匹配模式。sso
+
的使用方法。+表示,+前面的字符必須至少出現一次。同時也是一種貪婪的匹配模式。與*不一樣的是,*表示前面的字符能夠出現0次或屢次,而+表示至少出現一次。一樣的,仍是上面的字符串,咱們將正則表達式,修改爲下面這樣:方法
".*(s.+s).*"
輸出結果會變成:sss。爲何不是ss呢?就是由於,在正則表達式中,咱們用了.+這樣就表示,ss之間至少必須有一個字符才符合要求。im
{}
的使用方法{}有三種常見的用法:一、{2},花括號,裏面有一個數字,表示,花括號前面的字符出現的次數只能是花括號裏面的數字;二、{2,},花括號,數字,逗號。表示,前面的字符出現的次數至少是花括號裏面的數字;三、{2,5},花括號,數字區間。表示,前面的字符出現的次數,只能在這個區間內。如例:最少2次,最多5次。di
|
的使用|表示或者,好比:sucan | sucan1226。表示匹配sucan或者sucan1226,只要字符串中包含二者中的任意一個都知足條件。
[]
的使用[]表示,只要字符是[]裏面的任意一個都知足條件:例如:常見的手機號碼的匹配1[3578][0-9]{9}。表示,以1開頭,後面必須是3578中的一個,後面必須是0-9之間的數字,同時,只能出現9次。注意:中括號中的特殊字符沒有特殊含義。例如:[. ]表示,只有字符知足是.的時候才知足要求。再好比:[^1]表示,只要字符不是1都知足要求。
\s
匹配空格,例如:line = 你 好。匹配這個字符串就須要reg= 你\s好。
\S
匹配任意非空格。與\s恰好相反。一樣若是:line = 你 好。這時候用 reg = 你\S好,就匹配不了。
\w
\w的功能就是[A-Za-z0-9_],意思就是匹配任意一個字符,若是字符知足:A-Z或這個a-z或者0-9或者是_的時候。
\W
\W的功能跟\s恰好相反,只要不知足\w的任意字符,都知足\W。例如:空格,等。
[\u4E00-\u9FA5]
匹配漢字。
\d
匹配數字。例如:XXXX出生於1992年。如今,咱們須要提取出1992。
line = "XXXX出生於1992年" reg_str = ".*(\d{4}).*" match_obj = re.match(reg_str,line) if match_obj: print(match_obj.group(1))
上面是第一種方法,爲何不直接用(\d+)呢?這樣是匹配不到的,這樣只會匹配出來2。由於貪婪匹配!!!。除了上面這種方法,咱們還能夠將正則表達式修改一下。加上?取消貪婪匹配。
reg_str = ".*?(\d+).*"
# -*- coding:utf-8 -*- __author__ = "sucan" import re line = "XXXX出生於1992年1月" line = "XXXX出生於1992年1月1日" line = "XXXX出生於1992/1/1" line = "XXXX出生於1992-01-01" line = "XXXX出生於1992-1" line = "XXXX出生於1992-01" reg_str = ".*出生於(\d{4}[年/-]\d{1,2}([月/-]\d{1,2}|[月/-]$|$))" match_obj = re.match(reg_str,line) if match_obj: print(match_obj.group(1))