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

歡迎訪問 生活随笔!

生活随笔

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

python

学习python 正则表达式——与你同行!

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

正則表達式定義

??又稱為規則表達式,是一個特殊的字符序列,利用事先定義好的一些特定字符以及它們的組合組成一個‘規則’,檢查一個字符串是否與這種規則匹配來實現對字符的檢索、過濾、匹配、替換。正則表達式需要用到re模塊,該模塊不是獨立的第三方庫,不需要單獨安裝,但是使用時必須預先導入。re模塊提供了正則表達式操作所需的所有功能。

努力路上與你同行!

      • 正則表達式定義
  • 1. `.`:表示除換行符以外的任意一個字符;`\S`: 表示除空白符以外的任意一個字符
  • 2. `[]`:指定字符集
  • 3. `^`:匹配行首,匹配以^后面的字符開頭的字符串
  • 4. `$`:匹配行尾,匹配以$之前的字符結束的字符串
  • 5. `\`:反斜杠后面可以加不同的字符以表示不同的特殊意義
  • 6. `*`:匹配位于*之前的字符或子模式的0次或多次出現
  • 7. `+`:匹配位于+之前的字符或子模式的1次或多次出現
  • 8. `?`:匹配位于?之前的0個或1個字符
  • 9.`{m,n}`:表示至少有m個重復,至多有n個重復。m和n均為十進制數。
  • 例題
    • 例一
    • 例二
    • 例三
    • 例四

https://blog.csdn.net/hanhanwanghaha寶藏女孩的成長日記 歡迎您的關注!
歡迎關注微信公眾號:寶藏女孩的成長日記
讓這個可愛的寶藏女孩在努力的道路上與你一起同行!
如有轉載,請注明出處(如不注明,盜者必究)

元字符:在構建正則表達式時,有些特殊字符和自身并不匹配,而是用來表明應和一些特殊的東西匹配,或者會影響重復次數,這些特殊字符稱為元字符。

注: re模塊中的findall方法以列表的形式返回所有能匹配的子串,如果沒有找到匹配的,則返回空列表。

常用的元字符。

1. .:表示除換行符以外的任意一個字符;\S: 表示除空白符以外的任意一個字符

import re s = 'Hello,i am a college student.My name is Wang Tiantian.h\nb' print(s) print(re.findall(r'a',s)) #使用re.findall()方法返回所有能夠匹配出的子串 print(re.findall(r'n..',s)) print(re.findall(r'm\S',s))

運行結果:

2. []:指定字符集

(1)常用來指定一個字符集,如[abc],[a-z],[0-9];
(2)元字符在中括號中不起作用,如[akm\S]、[m.]中的元字符都不起作用;
(3)中括號內的‘’表示補集,匹配不在區間范圍內的字符,如[3]表示除3以外的任意字符。

import re s = 'x5x2x0x13xx1x4xxyz' print(re.findall(r'x[0-9]',s)) print(re.findall(r'x[0-9]x',s)) print(re.findall(r'x[0-9][0-9]x',s)) print(re.findall(r'x[^3]',s))

運行結果:

3. ^:匹配行首,匹配以^后面的字符開頭的字符串

import re s = 'how world How are you How many students' print(re.findall(r'^h[o].',s))

運行結果:

4. $:匹配行尾,匹配以$之前的字符結束的字符串

import re s = 'hello,I am wang! so I love you' print(re.findall(r'you$',s)) print(re.findall(r'hello$',s))b = 'sdma jdksmi djskjd masdmw' # $在[]中作為普通字符 print(re.findall(r'm[aiw$]',b)) # 匹配ma,mi,mw結尾的字符串 print(re.findall(r'm[aiw]$',b)) # 匹配ma,mi,mw,m$結尾的字符串 print(re.findall(r'm[aiw$]$',b))

運行結果:

5. \:反斜杠后面可以加不同的字符以表示不同的特殊意義

(1)\b匹配單詞頭或單詞尾;
(2)\B與\b相反,匹配非單詞頭或單詞尾;
(3)\d匹配任何十進制數;相當于[0-9];
(4)\D與\d相反,匹配任何非數字字符,相當于[^0-9];
(5)\s匹配任何空白字符,相當于[\t\n\r\f\v];
(6)\S與\s相反,匹配任何非空白字符,相當于[^\t\n\r\f\v];
(7)\w匹配任何字母、數字或下畫線字符,相當于[a-zA-Z0-9_];
(8)\W與\w相反,匹配任何非字母、數字和下畫線字符,相當于[^a-zA-Z0-9_];
(9)也可以用于取消所有的元字符:\、[;
(10)這些特殊字符都可以包含在[]中。如:[\s,.]將匹配任何空白字符、",“或”."。

import re s = '0x12x3x567x8x49y' print(re.findall(r'[0-9]',s)) print(re.findall(r'\d',s)) # 匹配字母x或者數字 print(re.findall(r'x\d',s)) print(re.findall(r'[x\d]',s))

運行結果:

6. *:匹配位于*之前的字符或子模式的0次或多次出現

import re s = 'a ab abb abbbbb abbbbbxa' re.findall(r'ab*',s)

運行結果:

7. +:匹配位于+之前的字符或子模式的1次或多次出現

import re s = 'a ab abb abbbbb abbbbbxa' print(re.findall(r'ab*',s)) print(re.findall(r'ab+',s))

運行結果:

8. ?:匹配位于?之前的0個或1個字符

當“?”緊隨其他限定符(*、+、{n}、{n,}、{n,m})之后時,匹配模式是“非貪心的”。“非貪心的”模式匹配搜索到盡可能短的字符串,而默認的“貪心的”模式匹配搜索到的、盡可能長的字符串。

import re s = 'a ab abb abbbbb abbbbbxa' print(re.findall(r'ab+',s)) #+符號后沒有問號:默認的貪心模式(盡可能長) print(re.findall(r'ab+?',s)) #+符號跟問號:非貪心模式(盡可能短)

運行結果:

9.{m,n}:表示至少有m個重復,至多有n個重復。m和n均為十進制數。

忽略m表示0個重復,忽略n表示無窮多個重復。
{0,}等同于*;{1,}等同于"+";{0,1}與"?"相同,但是最好使用后者。

import re s = 'a b baaaabaacccaa ' print(re.findall(r'a{1,3}',s)) print(re.findall(r'a+',s)) print(re.findall(r'a{1,}',s)) print(re.findall(r'a{,3}',s)) print(re.findall(r'a{3}',s)) s = '021 - 33507yyz,021 - 33507865,010 - 12345678,021 - 123456789' print(re.findall(r'021 - \d{8}',s)) # \b匹配字符串的頭和尾 print(re.findall(r'\b021 - \d{8}\b',s))

運行結果:

例題

例一

隨機產生10個長度為1-25之間,由字母、數字、下劃線、‘.’、‘#’、‘%’特殊字符組成的字符串構成列表,
找出列表中符合下列要求的字符串:長度為5~20,必須以字母開頭,可帶數字、下劃線、‘.’。

import string import random import re List1 = []#生成包含大小寫字母、數字和其他指定字符的字符串 x = string.ascii_letters+string.digits+'_.#%' #生成列表List1 for i in range(10):#生成字符作為元素,個數為1~25隨機數之間的字符列表yy = [random.choice(x) for i in range(random.randint(1,25))]#用join方法將y中的元素合并成字符串,并將其加入列表List1中List1.append(''.join(y)) #輸出列表List1 print('生成的列表為:') for s in List1:print(s) print()# 查找符合要求的字符串: #(1)總長度為5~20 #(2)以字母開頭(1個字符):^[a-zA-Z]{1} #(3)可帶數字、下劃線、'.',至尾部共4~19個:[a-zA-Z0-9._]{4,19}$ #構建正則表達式 r = r'^[a-zA-Z]{1}[a-zA-Z0-9._]{4,19}$' print('滿足要求的字符串是:') for i in List1:if re.findall(r,i):print(i)

運行結果:

例二

編寫程序,生成一個包含十個不重復的取自a~z(隨機生成)的小寫字母的列表,將原列表中‘abcdefg’字母字符按位置順序分別替換為‘1234567’數字字符,即a替換為1,b替換為2,以此類推。先輸出原列表和新列表,再采用字符串格式化方式逐個輸出新列表中的元素。

# coding=utf-8""" 編寫程序,生成一個包含十個不重復的取自a~z(隨機生成)的小寫字母的列表, 將原列表中‘abcdefg’字母字符按位置順序分別替換為‘1234567’數字字符,即a替換為1,b替換為2, 以此類推。先輸出原列表和新列表,再采用字符串格式化方式逐個輸出新列表中的元素。 """import randomlist1 = [] i = 0 while i < 10:c = chr(random.randint(ord('a'), ord('z')))if c not in list1:i += 1list1.append(c) print('原列表:', list1) s1 = ','.join(list1)#通過maketrans和translate函數實現字符的替換 t = ''.maketrans("abcdefg", '1234567') s2 = s1.translate(t) list2 = s2.split(',') print("新列表", list2) print("逐個輸出新列表中的元素:") for i in list2:print("%s" % i, end='')

運行結果:

例三

生成15個包括10個字符的隨機密碼,密碼中的字符只能是大小寫字母、數字和特殊字符“@”、“$”、“#”、“&”、“_”、“~”構成。

# coding=utf-8""" 生成15個包括10個字符的隨機密碼, 密碼中的字符只能是大小寫字母、 數字和特殊字符“@”、“$”、“#”、“&”、“_”、“~”構成。 """import string import randompassword1 = string.ascii_letters + string.digits + "@$#&_~" for i in range(15):print("隨機密碼" + str(i + 1) + ":", end=" ")password2 = "".join([random.choice(password1) for i in range(10)])print(password2, end=" ")print()

https://blog.csdn.net/hanhanwanghaha寶藏女孩的成長日記 歡迎您的關注!
歡迎關注微信公眾號:寶藏女孩的成長日記
讓這個可愛的寶藏女孩在努力的道路上與你一起同行!
如有轉載,請注明出處(如不注明,盜者必究)

例四

# coding=utf-8""" 給定列表x=["13915556234", "13025621456", "15325645124", "15202362459"], 檢查列表中的元素是否為移動手機號碼,這里移動手機號碼的規則是:手機號碼共11位數字; 以13開頭,后面跟456789中的某一個;或者以15開頭,后面跟01289中的某一個。 """import rex = ["13915556234", "13025621456", "15325645124", "15202362459"]zz = r'^(13[4-9]\d{8})|(15[01289\d{8}])$' print("打印所有號碼:", x)print("其中,為移動手機號碼的為:") for i in x:if re.findall(zz, i):print(i)

運行結果:

近日新感悟:如果遇到不是很確定是否要解決阻礙,那不妨退一萬步,用最初的目標來衡量這件事是否值得。或者以客觀的態度來衡量此事!

接下來這一年得好好努力了,希望明年的這個時候我已上岸!也祝所有考研的小伙伴一起努力,最后能夠去到想去的大學!

總結

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

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