日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python学习笔记(十一)——正则表达式

發布時間:2025/3/21 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python学习笔记(十一)——正则表达式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

獨有的工具:用來匹配或者提取字符串。
不屬于Python基礎。屬于編程基礎。
需要導入re模塊import re

文章目錄

  • 1、findall方法
  • 2、match方法
  • 3、search方法
    • *補充
  • 4、元字符
    • 4.1、單字符匹配
    • 4.2、代表數量的元字符
    • 4.3、代表邊界的元字符
    • 4.4、分組匹配
    • 補充
  • 5、貪婪和非貪婪

1、findall方法

在字符串中找到正則表達式所匹配的所有子串,并返回一個列表。如果沒有找到匹配的,則返回空列表.

示例:

str1 = '人生若只如初見,何事秋風悲畫扇' print(re.findall('只如初見',str1)) #精準匹配 指明道姓 print(re.findall('人之初',str1)) 執行結果: ['只如初見'] []

2、match方法

re.match 嘗試從字符串的起始位置匹配一個模式,匹配成功 返回的是一個匹配對象(這個對象包含了我們匹配的信息)。如果不是起始位置匹配成功的話,match()返回的是None.

注意:match只能匹配到一個

import restr2 = 'python123python666' result = re.match('python',str2) #精準匹配 指明道姓 print(result)執行結果: <_sre.SRE_Match object; span=(0, 6), match='python'>

3、search方法

re.search 掃描整個字符串,匹配成功 返回的是一個匹配對象(這個對象包含了我們匹配的信息)。

注意:search也只能匹配到一個,找到符合規則的就返回,不會再繼續往后找。

import re a = "python123123java" print(re.search('python',a))# yes print(re.search('cc',a))# None執行結果: <_sre.SRE_Match object; span=(0, 6), match='python'> None

re.match與re.search的區別
①re.match從字符串的開始位置匹配 如果字符串一開始就不符合規,則匹配失敗返回None。
②re.search匹配整個字符串,如果一直找不到,返回None
③都只返回一個符合條件的

注意:re.findall 會找到所有符合規則的字符串


*補充

group:提取匹配到的內容
span:提取到匹配到的字符串的下標

示例:

str2 = 'python123python666' result = re.match('python',str2) print(result) #group:提取匹配到的內容 a = result.group() print(a) #span:提取到匹配到的字符串的下標 b = result.span() print(b)執行結果: <_sre.SRE_Match object; span=(0, 6), match='python'> python (0, 6)

4、元字符

4.1、單字符匹配

字符描述
.匹配任意1個字符(除了\n)
[]匹配 [] 中列舉的字符
\d匹配數字,即0-9
\D匹配非數字,即不是數字
\s匹配空白,即 空格,tab鍵
\S匹配非空白
\w匹配單詞符,即a-z、A-Z、0-9、_
\W匹配非單詞字符

示例:

import re # . 代表任意一個字符 str1 ='高堂明鏡悲白發,朝如青絲暮成雪' print(re.findall('高堂明鏡...', str1)) #['高堂明鏡悲白發']# [] 字符組 匹配[]中列舉的字符組 str1 ='高1堂明a鏡2悲白ea發3,朝如青s46絲暮成8' print(re.findall('[8]', str1)) #[] print(re.findall('[0-9]', str1)) #[] print(re.findall('[a-z]', str1)) #[] str1 = 'abba abbd abbe abe abbs adc' print(re.findall('abb[abe]',str1)) #整個中括號只代表一個字符 #['abba', 'abbe']# \d 匹配數字 即0-9 str1 = 'abc123efg456g@' result = re.findall(r'\d',str1) print(result) #['1', '2', '3', '4', '5', '6'] result = re.findall(r'\d{3}',str1) print(result) #['123', '456']# \D 匹配非數字 str1 = 'abc123efg456gk@wc' result = re.findall(r'\D',str1) print(result) #['a', 'b', 'c', 'e', 'f', 'g', 'g', 'k', '@', 'w', 'c'] result = re.findall(r'\D{3}',str1) print(result) #['abc', 'efg', 'gk@'] result = re.findall(r'\D{2,4}',str1) print(result) #['abc', 'efg', 'gk@w']# \s 匹配空格 str1 = 'hello you are welcome!' result = re.findall(r'\s',str1) print(result) #[' ', ' ', ' ']# \S 匹配非空格 str1 = 'hello you are welcome!' result = re.findall(r'\S',str1) print(result) #['h', 'e', 'l', 'l', 'o', 'y', 'o', 'u', 'a', 'r', 'e', 'w', 'e', 'l', 'c', 'o', 'm', 'e', '!'] result = re.findall(r'\S{2,4}',str1) #注意看結果 print(result) #['hell', 'you', 'are', 'welc', 'ome!']# \w 匹配單詞字符和數字 0-9 a-z A-Z str1 = '@$123hello456&%' result = re.findall(r'\w',str1) print(result) #['1', '2', '3', 'h', 'e', 'l', 'l', 'o', '4', '5', '6']# \W 匹配非單詞字符和數字 str1 = '@$123hello456&%' result = re.findall(r'\W',str1) print(result) #['@', '$', '&', '%']

4.2、代表數量的元字符

字符描述
*匹配前一個字符出現0次或者無限次,即可有可無
+匹配前一個字符出現1次或者無限次,即至少有1次
匹配前一個字符出現0次或者1次,即要么有1次,要么沒有
{m}匹配前一個字符出現m次
{m,}匹配前一個字符至少出現m次
{m,n}匹配前一個字符出現從m到n次

示例:

import re # * 匹配前一個字符出現0次或無限次 即可有可無 # + 匹配前一個字符出現1次或無限次 即至少有1次 # ? 匹配前一個字符出現0次或1次 即要么0次要么1次 str1 = 'abbbc' result = re.findall('ab*c',str1) print(result) #['abbbc'] result = re.findall('ab+c',str1) print(result) #['abbbc'] result = re.findall('ab?c',str1) print(result) #[]# {} 控制次數 控制前一個字符出現的次數 可以直接寫次數 數字代表數量 str1 = 'abbbbbbc' result = re.findall('ab{6}c',str1) print(result) #['abbbbbbc'] result = re.findall('ab{2,6}c',str1) #可以寫區間 左閉右閉 print(result) #['abbbbbbc'] result = re.findall('ab{,6}c',str1) #起始位置不寫 是從0開始 print(result) #['abbbbbbc'] result = re.findall('ab{2,}c',str1) #終止位置不寫 可到正無窮 print(result) #['abbbbbbc']

4.3、代表邊界的元字符

字符描述
^匹配字符串開頭
$匹配字符串結尾
\b匹配一個單詞的邊界

示例:

import re #錨點元字符 ^ 字符串首 $ 字符串尾 str1 ='高堂明鏡悲白發,朝如青絲暮成雪' result = re.findall('^悲白發',str1) #只匹配以該字符串開始的 print(result) #[] result = re.findall('暮成雪$',str1) #只匹配以該字符串結尾的 print(result) #['暮成雪']# \b 單詞邊界 str1 = 'hello world niyehello haha hellowe' result = re.findall(r'\bhello\b',str1) print(result) #['hello']

4.4、分組匹配

字符描述
|匹配左右任意一個表達式
(ab)將括號中的字符作為一個分組

示例:

import re # | 選擇元字符 str1 = 'a+bhelloa-bhello' result = re.findall(r'a\+b|a-b',str1) #\+表示轉義字符 + print(result) #['a+b', 'a-b']# () 將括號中字符作為一個分組 只提取括號當中的內容 html = '<a>音樂</a><a>日語</a><a>韓語</a>' result = re.findall(r'<a>(.*)</a>', html) # 貪婪匹配 print(result) #['音樂</a><a>日語</a><a>韓語'] result = re.findall(r'<a>(.*?)</a>', html) # 非貪婪匹配 print(result) #['音樂', '日語', '韓語']

補充

模式描述
a| b匹配a或b
(re)對正則表達式分組并記住匹配的文本
(?ix)正則表達式包含兩種可選標志:i 或 x 。只影響括號中的區域。
(?-ix)正則表達式關閉 i 或 x 可選標志。只影響括號中的區域。
\A匹配字符串開始
\Z匹配字符串結束,如果是存在換行,只匹配到換行前的結束字符串。
\z匹配字符串結束
\G匹配最后匹配完成的位置。
\b匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。
\B匹配非單詞邊界。‘er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。
\n, \t, 等.匹配一個換行符。匹配一個制表符。等
\1…\9匹配第n個分組的內容。
\10匹配第n個分組的內容,如果它經匹配。否則指的是八進制字符碼的表達式。

5、貪婪和非貪婪

正則默認都是用貪婪模式去匹配數據的,就是盡可能多的匹配符合要求的數據。

在非貪婪模式下,始終找最短匹配。

示例:

import re b = '<html>000</html><td>ddd</td>' print(re.findall(r'<.*>',b))# 貪婪 #['<html>000</html><td>ddd</td>'] print(re.findall(r'<.*?>',b))# 加上?變成非貪婪 #['<html>', '</html>', '<td>', '</td>'] print(re.findall(r'-(\d+)(.+-)','-123456789-')) #[('12345678', '9-')] print(re.findall(r'-(\d+?)(.+-)','-123456789-')) #[('1', '23456789-')]

總結

以上是生活随笔為你收集整理的python学习笔记(十一)——正则表达式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。