正規表示式雜記

2021-10-17 05:22:03 字數 3280 閱讀 3942

正規表示式:

記錄文字規則的**,是乙個特殊的字串行

由普通字元和元字元組成,實際上就是對元字元的練習

元字元:

.匹配除了換行符\n以外的任意字元

\w匹配字母或數字或下劃線或漢字

\s匹配任意的空白符

\d匹配數字

\b匹配單詞的開始和結束

^匹配字串的開始

$匹配字串的結束

import re

reg_string =

'[email protected]@!:weitao蔚濤'

reg =

'\w'

s = re.findall(reg,reg_string)

print

(s)#結果為字母數字的字元型列表

'''反義**: 和對應小寫相反

\w\s

[^]限定符:

* 重複零次或多次

+ 重複一次或多次

? 重複零次或一次

重複n次

重複n次或更多次

重複n到m次

'''reg_string =

'[email protected]@!:weitao蔚濤'

reg =

'\d'

result = re.findall(reg,reg_string)

print

(result)

#['9527']

#匹配範圍

reg2 =

'[0-9a-z]'

result2 = re.findall(reg2,reg_string)

print

(result2)

#['hell', 'o952', '7pyt', 'cwtn', 'hell', 'weit']

#匹配ip應用

ip =

'this is ip:192.168.1.123 : 172.138.2.15'

reg =

'\d.\d+.\d+.\d'

#reg = re.compile('\d.\d+.\d+.\d')

result = re.findall(reg,ip)

print

(result)

#['192.168.1.1', '172.138.2.1']

# search

ip =

'this is ip:192.168.1.123 : 172.138.2.15'

reg2 =

'(\d.)\d'

result2 = re.search(reg2,ip)[0

]print

(result2)

#192.168.1.123

#search 和findall : search只匹配第乙個,findall匹配所有

#組匹配 group(0)是整個 1是第一組

s ='this is phone:15058528162 and this is my postcode:321000'

reg =

'this is phone:(\d) and this is my postcode:(\d)'

result = re.search(reg,s)

.group(0)

#this is phone:15058528162 and this is my postcode:321000

print

(result)

#match 只匹配開頭的 re.i忽略大小寫

reg_string =

'hellopythonhellostring'

reg =

'hello'

result2 = re.match(reg,reg_string,re.i)

.group(

)print

(result2)

#hello

補充:

1.貪婪和非貪婪:

貪婪:盡可能多的匹配 python預設貪婪

非貪婪:盡可能少的匹配 非貪婪操作符:?用在* + ?後面,要求正則匹配的越少越好

2.匹配*:用\*[*]

3.字符集[abc][a-c]一樣

正規表示式使用 對特殊字元進行轉義,所以如果我們要使用原始字串,只需加乙個 r 字首:r』hangzhou\t.\tpython』

re 模組一般使用步驟:

使用 compile() 函式將正規表示式的字串形式編譯為乙個 pattern 物件

通過 pattern 物件提供的一系列方法對文字進行匹配查詢,獲得匹配結果,乙個 match 物件。

最後使用 match 物件提供的屬性和方法獲得資訊,根據需要進行其他的操作

compile 函式:

compile 函式用於編譯正規表示式,生成乙個 pattern 物件,它的一般使用形式如下:

import re

it = re.

compile

(r'/d+'

)

例子:

import re

# 北美**的常用格式:(eg: 2703877865)

# 前3位: 第一位是區號以2~9開頭 , 第2位是0~8, 第三位數字可任意;

# 中間三位數字:第一位是交換機號, 以2~9開頭, 後面兩位任意

# 最後四位數字: 數字不做限制;

pattern2 = r'\(?[2-9][0-8]\d\)?[-\.\s]?[2-9]\d[-\.\s]?\d'

text =

'1535(323)4567890(54521)'

patternobj = re.

compile

(pattern2)

result = patternobj.findall(text)[0

]print

(result)

#(323)4567890

正規表示式 正規表示式 總結

非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...

正規表示式 表示式

網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...

Linux正規表示式 編寫正規表示式

為了所有實用化的用途,你可以通過使用程式產生正確的結果。然而,並不意味著程式總是如你所願的那樣正確地工作。多數情況下,如果程式不能產生想要的輸出,可以斷定真正的問題 排除輸入或語法錯誤 在於如何描述想要的東西。換句話說,應該考慮糾正問題的地方是描述想要的結果的表示式。表示式不完整或者公式表示得不正確...