01-15正則

一:正則

1.什么是正則表達式(語法通用)

正則就是一種用來做字符串匹配的工具:他可以通過不同的符號匹配不同的字符

2.python對正則表達式的支持

通過re模塊提供相應支持正則表達式的方法
a.fullmatch(正則表達式,字符串) -->用正則表達式來和指定字符串匹配,如果匹配成功,返回匹配對象。匹配失敗返回None
python中的正則表達式是寫在字符串中的,但是一般情況下會在最前面加個r/R

import re
def main():

0 普通字符(代表字符本身)
匹配一個字符串,只有三個字符,每個字符分別是a,s,d

re_str = r'asd' #
result = re.fullmatch(re_str,'asd')
print(result)
1 .(匹配任意字符)

注意:一個 . 代表一個字符?!尽静荒芷ヅ?\n
匹配一個字符串,只有三個字符,第一個字符是a,第二個字符是任意字符,第三個字符是c

  re_str = r'a.c'
    result = re.fullmatch(re_str, 'awc')
    print(result)
2 \w(匹配字母數(shù)字下劃線)

注意:也可以匹配中文?!尽疽粋€ \w 只能匹配一個字符
匹配一個字符,第一個字符是任意字符,第二第三個字符是字母數(shù)字或下劃線,最后三個是asd

re_str = r'.\w\wasd'
    result = re.fullmatch(re_str, 'w_花asd')
    print(result)
3. \s(匹配空白字符)

注意:空白字符,指的是所有能產(chǎn)生空白的字符,包括空格、制表符、換行等

  re_str = r'\w\w\s.' #匹配一個字符串,前兩個是字母數(shù)字或下劃線.第三個是空白,最后一個是任意字符
   result = re.fullmatch(re_str, 'qw .')
   print(result)
4. \d(匹配數(shù)字字符)
re_str = r'\d\d\d'  #匹配一個字符串有三個字符串,每個字符都是數(shù)字字符串
 result = re.fullmatch(re_str, '634')
 print(result)
5. \b (檢測單詞邊界)
檢測正則表達式中\(zhòng)b所在的位置是否是單詞邊界
 單詞邊界:所有可以將兩個單詞區(qū)分開的符號都是單詞邊界,例如:空格,縮進,標點符號等。單詞開頭結尾
匹配一個字符串的內(nèi)容是‘how are’,并且要求字符‘a(chǎn)’的前面是單詞邊界

注意:\b 不是匹配符號,不會匹配出一個字符,只是檢測所在位置是否滿足要求。

re_str = r'how\b are'
  result = re.fullmatch(re_str, 'how are')
  print(result)
6. ^ (檢測字符串開頭)

匹配一個字符串是三個數(shù)字字符,并且第一個字符是在字符串開頭

re_str = r'^\d\d\d'
 result = re.search(re_str, '123asdfqwasdf')
 print(result)
7 $(檢測字符串結尾)

匹配一個字符串是三個數(shù)字字符,并且最后一個字符是在字符串開頭

  re_str = r'\d\d\d$'
    result = re.fullmatch(re_str, '模壓基本原則asd123')
    print(result)
8 \B(檢測非單詞邊界)
re_str = r'asd\B123'
  result = re.fullmatch(re_str, 'asd123')
  print(result)
9 \W (匹配非數(shù)字、字母、下劃線和中文)
10 \S (匹配非空白字符)
11 \D (匹配非數(shù)字字符)
12 [字符集] (匹配字符集中的任意一個字符)

注意:一個[]代表一個字符
a. 普通用法
[字符集] - 匹配字符集中的任意一個字符

b.表示范圍
[字符1-字符2] - 匹配字符1到字符2中所有字符。要求字符1的編碼值要小于字符2的編碼值
[a-zA-Z] 所有字母。 [a-zA-Z\d_] 數(shù)字字母下劃線
匹配一個字符串有4個字符,第一個字符是‘a(chǎn)sd’中的一個,后面是123

    re_str = r'[asd]123'
    result = re.fullmatch(re_str, 'a123')
    print(result)

匹配一個字符串有4個字符,第一個字符是1到9中的任意一個,最后一個是任意小寫字母。中間兩個是任意數(shù)字

 re_str = r'[1-9]\d\d[a-z]' #第一個字符是1到9中的任意一個
    result = re.fullmatch(re_str, '112a')
    print(result)
13 [^字符集] - 匹配非字符集中的其他任意字符

注意:^放在[]里的最前面才表示匹配不在字符集中的其他任意字符;否則就是表示這個字符本身

 第一個字符只要不是asd中的一個其他字符都可以,后面是123 
   re_str = r'[^asd]123'
    result = re.fullmatch(re_str, 'c123')
    print(result)
     [^1-9] 第一個字符除了1到9都可以
    [1-9^] 第一個字符是1到9其中一個或者是^
14 轉義符號

a.正則中也可以通過在特殊符號前加‘\’來對符號進行轉義
b.除了在中括號中有特殊意義的符號,其他符號放在[]中也是表示符號本身
[.] 表示一個.
- :在中括號中的兩個字符之間表示誰到誰,如果想要表示他本身就不要放在兩個字符之間(加\也可以)
^ :在中括號中的最前面有特殊意義,如果想要表示他本身就不要放在最前面(加\也可以)
[]:在中括號中表示[],要加 \
注意:轉義字符串是字符串中的概念, 轉義符號是正則表達式的概念

re_str = r'\d\d\.\d\d'  # \. 反斜線阻止 . 轉義,就是一個點。
print(re.fullmatch(re_str,'23.45'))
if __name__ == '__main__':
    main()

二:匹配次數(shù)

1 *(匹配0次或多次)

字符 * - 指定的字符出現(xiàn)0次或者多次(這兒的字符可以是正則符號,也可以是普通字符)
a* - a出現(xiàn)0次或者多次
\d* - 任意數(shù)字出現(xiàn)0次或者多次
[a-z]* - 任意小寫字母出現(xiàn)0次或者多次

 import re
def main():
    re_str = r'a*123'  # 123前面有0個或者多個字符,并且每個字符都是a
    print(re.fullmatch(re_str,'aaaaaa123'))

    re_str = r'\d*123' #123前面有0個或者多個字符,并且每個字符都是數(shù)字字符
2 +(匹配一次或多次)
    re_str = r'a+123'  # 123前面有1個或者多個字符,并且每個字符都是a
    print(re.fullmatch(re_str, 'aaaaaa123'))

    re_str = r'\d+123'
3 ?(匹配0次或者1次)
    #練習:寫一個正則表達式,能夠匹配所有的整數(shù)字符串。
    re_str = r'[-+]?[1-9]\d*'     # 123  -123  +123
    print(re.fullmatch(re_str, '123'))
4 {}
    {M,N} - 匹配M到N次(最少M次,最多N次)
    {M,} - 匹配至少M次
    {,N} - 匹配最多N次
    {N} - 匹配N次
    print(re.fullmatch(r'a{2,5}','aaa'))
    #密碼;6-16位,只能包含數(shù)字和字母
    print(re.fullmatch(r'[a-zA-Z\d]{6,16}','asdfwq123'))
if __name__ == '__main__':
    main()

三:分之與分組

  1. | (分之)
    表達式1 | 表達式2 | 表達式3 - 先用表達式1進行匹配,匹配成功就成功;如果不成功則依次使用后面的表達式去匹配,有一個匹配成功就成功。(三個表達式中只要有一個能匹配成功就成功,否則失?。?/li>
def main():
    re_str = r'[a-z]{3}|\d{3}'   #中間不能隨意加空格,意義不一樣
    print(re.fullmatch(re_str,'132'))

a.分組 - 將括號里的內(nèi)容看成一個整體,

b.分組重復 - 在有分組的正則表達式中可以在分組的后面通過 '\數(shù)字' 來重復第幾個分組匹配到的內(nèi)容
(\d{2})asd\1 ---> 78asd78 #\1 - 前面第一個分組重復一次 #\1{2} 第一個分組重復2次

re_str = r'asd([A-Z]{2}|\d{2})'  # 小括號分組
print(re.fullmatch(re_str,'asdKD'))
re_str = r'(asd){2}'  # asd整體出現(xiàn)2次  [[r'asd{2}' == asdd
print(re.fullmatch(re_str,'asdasd'))
分組重復
re_str = r'(\d{2})asd'
print(re.fullmatch(re_str,'34asd34'))
if __name__ == '__main__':
    main()
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • python的re模塊--細說正則表達式 可能是東半球最詳細最全面的re教程,翻譯自官方文檔,因為官方文檔寫的是真...
    立而人閱讀 23,448評論 4 46
  • 什么是正則表達式 正則就是一種用來做字符串匹配的工具,通過不同的符號,匹配不同的字符 python對正則表達式的支...
    xxxQinli閱讀 673評論 0 1
  • 推薦幾個正則表達式編輯器 Debuggex :https://www.debuggex.com/ PyRegex:...
    木易林1閱讀 11,854評論 9 151
  • 幾個正則表達式編輯器 Debuggex :https://www.debuggex.com/ PyRegex:ht...
    沒技術的BUG開發(fā)攻城獅閱讀 4,686評論 0 23
  • 正則表達式到底是什么東西?字符是計算機軟件處理文字時最基本的單位,可能是字母,數(shù)字,標點符號,空格,換行符,漢字等...
    獅子挽歌閱讀 2,287評論 0 9

友情鏈接更多精彩內(nèi)容