正則表達式使用

簡介python

    正則表達式是對字符串(包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱爲「元字符」))操做的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個「規則字符串」,這個「規則字符串」用來表達對字符串的一種過濾邏輯。正則表達式是一種文本模式,該模式描述在搜索文本時要匹配的一個或多個字符串。正則表達式

做用編碼

    給定一個正則表達式和另外一個字符串,咱們能夠達到以下的目的:spa

          1. 給定的字符串是否符合正則表達式的過濾邏輯(稱做「匹配」);
          2. 能夠經過正則表達式,從字符串中獲取咱們想要的特定部分或進行替換。
符號
   正則表達式由一些普通字符和一些元字符(metacharacters)組成。普通字符包括大小寫的字母和數字,而元字符則具備特殊的含義,下面將詳解一些經常使用的元字符;
元字符  描述 
轉義字符,例如:「\\n」匹配\n。「\n」匹配換行符。序列「\\」匹配「\」而「\(」則匹配「(」
匹配輸入行首 
匹配輸入行尾 
匹配前面的子表達式任意次,例如:zo*能匹配「z」,也能匹配「zo」以及「zoo」,*等價於{0,} 
+ 匹配前面的子表達式一次或屢次(大於等於1次),例如:「zo+」能匹配「zo」以及「zoo」,但不能匹配「z」,+等價於{1,} 
? 匹配前面的子表達式零次或一次,例如:「do(es)?」能夠匹配「do」或「does」,?等價於{0,1} 
{n n是一個非負整數。匹配肯定的n,例如:「o{2}」不能匹配「Bob」中的「o」,可是能匹配「food」中的兩個o 
{n,}  n是一個非負整數,至少匹配n,例如:「o{2,}」不能匹配「Bob」中的「o」,但能匹配「foooood」中的全部o,「o{1,}」等價於「o+」,「o{0,}」則等價於「o*」 
{n,m mn均爲非負整數,其中n<=m最少匹配n次且最多匹配m次,例如:「o{1,3}」將匹配「fooooood」中的前三個o爲一組,後三個o爲一組。「o{0,1}」等價於「o?」。請注意在逗號和兩個數之間不能有空格。 
當該字符緊跟在任何一個其餘限制符(*,+,?,{n},{n,},{n,m})後面時,匹配模式是非貪婪的,非貪婪模式儘量少地匹配所搜索的字符串,而默認的貪婪模式則儘量多地匹配所搜索的字符串,例如:對於字符串「oooo」,「o+」將盡量多地匹配「o」,獲得結果[「oooo」],而「o+?」將盡量少地匹配「o」,獲得結果 ['o', 'o', 'o', 'o'] 
.(點)  匹配除「\n」和"\r"以外的任何單個字符 
 x|y 匹配x或y,例如:「z|food」能匹配「z」或「food」(此處請謹慎),「[z|f]ood」則匹配「zood」或「food」 
 [xyz] 字符集合,匹配所包含的任意一個字符,例如:「[abc]」能夠匹配「plain」中的「a」 
 [^xyz] 負值字符集合,匹配未包含的任意字符,例如:「[^abc]」能夠匹配「plain」中的「plin」任一字符 
[a-z] 
字符範圍,匹配指定範圍內的任意字符,例如:「[a-z]」能夠匹配「a」到「z」範圍內的任意小寫字母字符,
注意:只有連字符在字符組內部時,而且出如今兩個字符之間時,才能表示字符的範圍; 若是出字符組的開頭,則只能表示連字符自己
 
[^a-z]  負值字符範圍,匹配任何不在指定範圍內的任意字符,例如:「[^a-z]」能夠匹配任何不在「a」到「z」範圍內的任意字符 
( )  將( 和 ) 之間的表達式定義爲「組」(group),而且將匹配這個表達式的字符保存到一個臨時區域(一個正則表達式中最多能夠保存9個),它們能夠用 \1 到\9 的符號來引用 
\d  匹配一個數字字符,等價於[0-9] 
\D 匹配一個非數字字符,等價於[^0-9] 
\t 匹配一個製表符 
\w  匹配包括下劃線的任何單詞字符 
 \W 匹配任何非單詞字符,等價於「[^A-Za-z0-9_]」 
 
經常使用正則表達式實例
    1.驗證用戶名和密碼:("^[a-zA-Z]\w{5,15}$"),含義:第一個字必須爲字母且後面爲5~15位的數字或字母或下劃線;
    2.驗證手機號碼(包含虛擬號碼和新號碼段):"^1([38][0-9]|4[5-9]|5[0-3,5-9]|66|7[0-8]|9[89])[0-9]{8}$";
    3.驗證身份證號(15位):"^([1-6][1-9]|50)\d{4}\d{2}((0[1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\d{3}$"   (18位):"^([1-6][1-9]|50)\d{4}(18|19|20)\d{2}((0[1-9])|10|11|12)(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$";
    4.驗證Email地址:"(\w+\.)*\w+@(\w+\.)+[a-zA-Z]+";
    5.只能輸入由數字和26個英文字母組成的字符串:"^[A-Za-z0-9]+$";
    6.只能輸入長度爲3的字符:"^.{3}$";
    7.驗證URL:"^https?://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$";
    8.只能輸入漢字:"^[\u4e00-\u9fa5]{0,}$";
    9.匹配騰訊QQ號:"^[1-9][0-9]{4,11}$",注:QQ號碼從10000開始;
    10.匹配中國郵政編碼:"^[1-9]\d{5}$";
    11.匹配HTML註釋:"<!-{2,}.*?-{2,}>";
    12.匹配IP地址:"(((\d{1,2})|(1\d{2})|(2[0-4]9)|(25[0-5]))\.){3}((\d{1,2})|(1\d{2})|(2[0-4]9)|(25[0-5]))";
示例(以python爲例)

例1:驗證輸入用戶名和QQ號及郵箱是否有效並給出對應的提示信息code

import  re
def main():
    username=input('請輸入你的用戶名:')
    m1=re.match(r'^[0-9a-zA-Z]{6,20}$',username)
    if not m1:
        print('你輸入的用戶名無效')
    qq = input('請輸入你的QQ號:')
    m2=re.match(r'^[1-9]\d{4,11}$',qq)
    if not m2:
        print('你輸入的qq號無效')
    email = input('請輸入你的郵箱:')
    m3=re.match('(\w+\.)*\w+@(\w+\.)+[a-zA-Z]+',email)
    if not m3:
        print('你輸入的郵箱無效')
    if m1 and m2 and m3:
        print('你輸入的信息有效')
if __name__=='__main__':
    main()

例2:替換字符串中的不良內容blog

import re
def main():
    sentence = '你丫是傻叉嗎? 我操你大爺的. Fuck you.'
    purified = re.sub('[操肏艹]|fuck|shit|傻[比屄逼叉缺吊屌]|煞筆',   '*', sentence, flags=re.IGNORECASE)
    print(purified)  # 你丫是*嗎? 我*你大爺的. * you.
if __name__ == '__main__':
    main()
相關文章
相關標籤/搜索