深度學習所需的python 學習筆記12

2021-08-10 02:03:14 字數 4140 閱讀 5342

個人推薦廖雪峰老師的課程,本來這一部分看不太懂,看了他**上的,感覺明了很多。

正規表示式

正規表示式是一種用來匹配字串,如判斷字串是否是乙個合法的郵箱位址時,如果對內容進行乙個個判斷的話,

會很麻煩,而正規表示式可以用一種描述性的語言來給字串定義乙個規則,對於符合規則的字串就匹配成功。

例判斷乙個字串是否是合法的email的方法是:

1:建立乙個匹配email的正規表示式

2:用改正規表示式去匹配使用者的輸入來判斷是否合法

正規表示式中,如果直接給出字元,就是精確匹配。用\d可以匹配數字,\w可以匹配乙個字母或數字,所以:

例:'00\d','\d\d\d''\w\w\d'

.可以匹配任意字元,'py.'可以匹配'pyc','py1','py!'等等

要匹配變長的字元,在正規表示式中,用*表示任意個字元,用+表示至少乙個字元,用?表示0個或1個字元,用表示n個字元

用表示n-m個字元 例:

\d\s+\d
其中\s可以匹配乙個字元,而\s+表示至少有乙個空格

所以,該正規表示式可以匹配以任意空格隔開的帶區號的**號碼

若要匹配012-345678,因為-是特殊字元,所以要用\轉義

\d\-\d

為了更精確的匹配,用表示範圍,比如:

[0-9a-za-z\_]表示匹配乙個數字、字母或下劃線

[0-9a-za-z\_]+可以匹配至少由乙個數字、字母或者下劃線組成的字串

[a-za-z\_][0-9a-za-z\_]*表示可以匹配字母或下劃線開頭,

後接任意個由數字、字母或者下劃線組成的字串

[a-za-z\_][0-9a-za-z\_]更精確的限制了變數的長度是1-20個字元

(開頭的乙個字母或下劃線,後面最多19個字元數字、字母或者下劃線)

a|b可以匹配a或b,所以(p|p)ython可以匹配'python'或'python'

^表示行的開頭,^\d表示必須以數字開頭

$表示行的結束,\d$表示必須以數字結束

re模組

在python中提供re模組,包含正規表示式的所有功能。注意,python的字串本身也用\轉義

s = 'abc\\-001'

對應的正規表示式字串是'abc\-001'

所以為了避免因為轉義引起的錯誤,建議使用r為字首,即

s = r'abc\-001'正規表示式字串不變

主要的是有match()方法和search()方法,但是兩者有一點差別,match函式只能夠字串的開始位置開始匹配,而search是可以匹配字串的任意位置,但也是返回找到的第乙個匹配的模式。在search中應用^表示式,可以和match一樣效果。

先看看如何判斷正規表示式是否匹配:

import re

s = "my number is 123"

match = re.search(r'\d', s)

print(match)

print(match.group())

<_sre.sre_match object; span=(13, 16), match='123'>

123

match()方法是判斷是否匹配,如果匹配成功,返回乙個match物件,否則返回none。常見的格式:

test = '使用者輸入的字串'

if re.match(r'正規表示式', test):

print('ok')

else:

print('failed')

import re

s = "my email is [email protected]"

match = re.search(r'[\w.-]+@[\w.-]+', s)

if match:

print(match.group())

else:

print("match not found")

[email protected]
還可以進一步從匹配字串中提取符合條件的特定部分,用(),即分組。

import re

2s = "my email is [email protected]"

3match = re.search('([\w.-]+)@([\w.-]+)', s)4​

5if match:

6 print(match.group()) # 完整郵箱位址

7 print(match.group(1)) # 姓名kaiser

8 print(match.group(2)) # 網域名稱jizhi.im

[email protected]

kaiser

jizhi.im

切分字串

用正規表示式切分字串比用固定的字元更靈活,

>>> 

'a b c'.split(' ')

['a', 'b', '', '', 'c']

無法識別兩個連續的空格,而使用正規表示式,則沒有這個問題,

>>> re.split(r'\s+', 'a b   c')

['a', 'b', 'c']

可以同時切分不同的字串

>>> re.split(r'[\s\,]+', 'a,b, c  d')#,符號需要使用轉義\

['a', 'b', 'c', 'd']

如果使用者輸入了一組標籤,可以使用正規表示式來把不規範的輸入轉化成正確的陣列。 捕獲

前面的match和search只能返回第乙個匹配模式的字串,如果我們要找到所有匹配的結果,

就需要用到findall()

findall

(pattern, string, flags[optional])

如果匹配成功,findall()會返回乙個列表,包含所有匹配的字串,否則返回的是空列表。

import

re

s = "tim's phone numbers are 12345-41521 and 78963-85214"

match = re.findall(r'\d', s)

if

match:

print(match)

['12345', '41521', '78963', '85214']

對於findall()也可以使用捕獲組,返回的是由元組(tuple)構成的列表(list)

import

re

s = "tim's phone numbers are 12345-41521 and 78963-85214"

match = re.findall(r'(\d)-(\d)', s)

print(match)

foriin

match:

print()

print(i)

print("first group", i[0])

print("second group", i[1])

[('12345', '41521'), ('78963', '85214')]

('12345', '41521')

first group 12345

second group 41521

('78963', '85214')

first group 78963

second group 85214

深度學習所需的python 學習筆記2

數值 python支援三種數值型別 1 int 2 float 3 complex 如複數8 17j 可使用type 函式檢視返回的變數型別 數值計算 python中常見的數值計算有表中 符號含義 例子結果 加法 42 143 減法42 0.5 41.5 乘法 1234 2 2468 浮點除法 1 ...

深度學習所需的python 學習筆記5

字典 字典也是一種集合,但是其中的元素分為鍵和值,類似於函式的對映,這樣的資料結構成為 關聯陣列 字典的格式 建立空字典 dict1 heros 字典heros中含有兩個元素,鍵和值,其中字串和數值可以作為鍵,鍵也是不可更改的資料型別,所以,列表和字典都不行,原則上,鍵是不可重複的,後者會覆蓋前者,...

深度學習python

squeeze 降維 維度為1的降掉 tf.squeeze arr,降維,將維度為1 的降掉 arr tf.variable tf.truncated normal 3,4,1,6,1 stddev 0.1 arr2 tf.squeeze arr,2,4 arr3 tf.squeeze arr 降掉...