程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

21天學習挑戰賽—Python學習記錄第一篇

編輯:Python

21天學習挑戰賽—Python學習記錄第一篇

​——

活動地址:CSDN21天學習挑戰賽

————

前言

一名大學牲,參與本次21天學習挑戰賽,一個是為了充實自己的暑假,不在暑假過度放松,第二個就是想要去學會 python 這門語言了。
自己的專業方向是網絡安全,不過只要是計算機類都是多多少少需要掌握一兩門語言吧。而 python語言,就是大部分人都會去選擇的語言,同時也是我所選擇的。
在這之前,也有一點點的 python 基礎,會寫一些簡單的語法。相比其它語言,python 的語法格式還是更為簡潔的,用起來也很方便,希望在後面的學習中能夠對 python 有更多的理解與掌握。

————

學習計劃

每周三次以上學習,每次學習記錄做好筆記。並完成每周三次發博文任務。

—————

正則表達式學習

正則表達式已經內嵌在Python中,通過import re模塊就可以使用。

作用:

進行檢索字符串,對某些字符進行匹配等

使用場景:

爬蟲爬取數據時、數據開發、文本檢索和數據篩選

——

運算符優先級

各正則表達式運算符的優先級順序:

相同優先級的從左到右進行運算,不同優先級的運算先高後低

——

re模塊使用

需要通過正則表達式對字符串進行匹配的時候,就要用到這個模塊。

match方法基本使用:
re.match(pattern, string, flags=0)

pattern: 匹配的正則表達式。
string: 要匹配的字符串。
flags: 標志位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。

例子:

import re
a = re.match("abc","abcd")
print(a.group())

match方法進行匹配。group 方法進行提取匹配到的數據。

在match() 函數中,表示我要在 abcd 字符串中匹配 abc 字符串,然後結果就在 abcd 中匹配到了 abc 。實際中,"abc"位置表示的正則表達式可能並沒有這麼簡單,可能有很多的運算符。

——

匹配單個字符

——

"."的用法

.: 匹配除 “\n” 之外的任何單個字符。要匹配包括 ‘\n’ 在內的任何字符,使用象 ‘[.\n]’ 的模式。

測試例子:

import re
a = re.match("a.c","agckw")
print(a.group())

——

[ ] 的用法

[...]: 用來表示一組字符,單獨列出:[amk] 匹配 ‘a’,‘m’或’k’

測試例子:

import re
a = re.match("[A-Z]gc","Hgckw")
print(a.group())

——

\d 的用法

\d: 匹配任意數字,等價於 [0-9]。

測試例子:

import re
a = re.match("Hg\dc","Hg6ckw")
print(a.group())

單字符匹配的字符:

. : 匹配除 “\n” 之外的任何單個字符。要匹配包括 ‘\n’ 在內的任何字符,請使用象 ‘[.\n]’ 的模式。
[...]: 用來表示一組字符,單獨列出:[amk] 匹配 ‘a’,‘m’或’k’
\w: 匹配包括下劃線的任何單詞字符。等價於’[A-Za-z0-9_]'。
\W: 匹配任何非單詞字符。等價於 ‘[^A-Za-z0-9_]’。
\s: 匹配任何空白字符,包括空格、制表符、換頁符等等。等價於 [ \f\n\r\t\v]
\S: 匹配任何非空白字符。等價於 [^ \f\n\r\t\v]
\d: 匹配任意數字,等價於 [0-9]
\D: 匹配一個非數字字符。等價於 [^0-9]

————
——

匹配多個字符

——

* 的用法

*: 匹配前一個字符出現0次或者無限次,即可有可無

測試例子:

import re
a = re.match("[a-z]*","abcdYFK")
print(a.group())

即匹配任意個小寫字母

——

{m}{m,n}用法

{m}: 匹配前一個字符出現m次
{m,n}: 匹配前一個字符出現從m到n次

測試例子:

import re
a = re.match("[a-zA-Z0-9_]{5}","abG9j01kl")
b = re.match("[a-zA-Z0-9_]{6,15}","a4BI3d測試g2K")
print(a.group())
print(b.group())

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

——

匹配開頭結尾

^: 匹配字符串的開頭
$: 匹配字符串的末尾。

測試例子:

import re
list = ["abG989","[email protected]","[email protected]","123anasm","@qq.com142"]
for i in list:
a = re.match("^[a-zA-Z_]+[0-9]{3}",i)
if a:
print("匹配結果:"+ a.group() + "————" + i +" 符合a匹配規則的要求")
b = re.match("[\w][email protected]$",i)
if b:
print("匹配結果:"+ b.group() + "————" + i +" 符合b匹配規則的要求")

這裡有a , b兩個匹配要求,
a匹配規則中 ^[a-zA-Z_]+[0-9]{3} 要求開頭是一個以上的字母,再匹配三個數字。
b匹配規則中 [\w][email protected]$ 要求必須以@qq.com 結尾,前面匹配一個以上包括下劃線的任何單詞字符。

其中用到了
\w: 匹配包括下劃線的任何單詞字符。等價於’[A-Za-z0-9_]'。
+:匹配前一個字符出現1次或者無限次,即至少有1次

其它的一些運算符:
\A: 匹配字符串開始
\z: 匹配字符串結束
\Z: 匹配字符串結束,如果是存在換行,只匹配到換行前的結束字符串。
\G: 匹配最後匹配完成的位置。
\b: 匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, ‘er\b’ 可以匹配"never" 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’
\B: 匹配非單詞邊界。‘er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’

————

注:
匹配字符的例子先到這裡,不過我還學習到一個問題。
match函數只能從頭開始匹配,不能從中間開始。而當返回值為none時,再次調用group()方法就會出現AttributeError: 'NoneType' object has no attribute 'group'這類報錯。

——
——

re模塊其它方法函數的學習與使用

——

re.search的用法

掃描整個字符串並返回第一個成功的匹配;匹配成功re.search方法返回一個匹配的對象,否則返回None。

函數語法:
re.search(pattern, string, flags=0)

pattern: 匹配的正則表達式
string: 要匹配的字符串。
flags: 標志位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。

前面說到match函數只能從頭開始匹配 ,如果字符串開始不符合正則表達式,則匹配失敗。
而用 re.search 就可以從中間匹配了。

測試例子:

import re
a = re.search("[0-9]{3}","abc123wnf")
print(a.group())

——

re.findall 的用法

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

語法和前面的search和match類似。
re.findall(pattern, string, flags=0)

重點在可以匹配多個結果。
匹配三個數字,返回一個列表,包含所有符合的匹配結果。

測試例子:

import re
a = re.findall("[0-9]{3}","abc123wn765f32fasg")
print(a)


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved