0516正規表示式

2022-03-19 12:54:44 字數 4027 閱讀 6388

正規表示式是記錄文字規則的**

例子:元字元*用來匹配0個或多個的前一字元;而元字元 . 用來匹配乙個任意的乙個字元。

**	                說明

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

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

\s 匹配任意的空白符

\d 匹配數字

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

^ 匹配字串的開始

$ 匹配字串的結束

元字元 ^ 和 $ 都匹配乙個位置,這和\b有點類似,^ 匹配你要用來查詢的字串的開頭,$ 匹配結尾:輸入5位到12位數字==>  ^\d$

如果你想查詢元字元本身的話,比如你要找 . 或者 * 就出現了問題:你沒辦法指定他們本身,因為他們會本解釋成別的意思,這時你就要使用 \ 來取消這些字元的特殊含義。因此,你應該使用 \. 和 \* 。當然,要查詢\本身,你也得用 \\ 。

**/語法    	說明

* 重複零次或更多次

+ 重複一次或更多次

? 重複零次或一次

重複n次

重複n次或更多次

重複n到m次

例子:m\d+ 匹配m後面跟1個或者更多數字

^\w+ 匹配一行的第乙個單詞(或者整個字串的第乙個單詞)

\(?0\d[) -]?\d

分析:要重複多個字元,可以用小括號來指定子表示式(也叫分組)

ip:

^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d))$

^表示開頭

25[0-5]|2[0-4]\d|[0-1]?\d?\d ==》

25[0-5] :百位是2,十位是5,個位是0到5的任意數

2[0-4]\d:百位是2,十位是0到4的任意數數,個位是0到9任意數

[0-1]?\d?\d:百位是0或者1或者沒有,十位可以有也可以沒有,個位是0到9的任意數

:表示這個符號之前的組出現3次

$表示結尾

手機號:

^1[3|4|5|7|8][0-9]\d$

^1:表示以1開頭

[3|4|5|7|8]:表示第二位可能是3、4、5、7、8中的任意乙個數

[0-9]:第三位表示是0到9的任意數

\d:最後是8個數字

$:表示結尾

**/語法	            說明

\w      匹配任意不是字母,數字,下劃線,漢字的字元

\s 匹配任意不是空白符的字元

\d 匹配任意非數字的字元

\b 匹配不是單詞開頭或結束的位置

[^x] 匹配除了x以外的任意字元

[^aeiou] 匹配除了aeiou這幾個字母以外的任意字元

例子:\s+:匹配不包含空白符的字串

]+>:匹配用尖括號括起來以a開頭的字串

**/語法	            說明

*? 重複任意次,但盡可能少重複

+? 重複1次或更多次,但盡可能少重複

?? 重複0次或1次,但盡可能少重複

?    重複n到m次,但盡可能少重複

? 重複n次以上,但盡可能少重複

例:a.*b它將匹配以a開頭b結尾的字串,如果來搜尋aabab的話它會拿到整個字串===貪婪匹配

a.*?b匹配最短的以a開始以b結束,如果搜尋aabab的話它的結果是aab===懶惰匹配

從起始位置開始根據資料模型去字串中匹配指定的內容,匹配單個

import re

m = re.match('\d+','12345wewewd')

print(m.group())

結果:

123

flags:

re.i	使匹配對大小寫不敏感

re.l 做本地化識別(locale-aware)匹配

re.m 多行匹配,影響 ^ 和 $

re.s 使 . 匹配包括換行在內的所有字元

re.u 根據unicode字符集解析字元。這個標誌影響 \w, \w, \b, \b.

re.x 該標誌通過給予你更靈活的格式以便你將正規表示式寫得更易於理解

根據模型去字串中匹配指定內容,匹配單個 

import re

m = re.match('\d+','um12345wewewd')

print(m.group())

結果:

123

a = "123abc456"

print(re.search("([0-9]*)([a-z]*)([0-9]*)", a).group())

print(re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(0))

print(re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(1))

print(re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(2))

print(re.search("([0-9]*)([a-z]*)([0-9]*)", a).groups())

結果:

123abc456

123abc456

123abc

('123', 'abc', '456')

上面的兩個式子都是用來匹配單個的值,即只能匹配字串中的乙個,如果想匹配字串中所有符合條件的元素則需要用findall

m = re.findall('\d+','123ddee343efgdgg55r6r')

print(m)

結果:

['123', '343', '55', '6']

注:findall的結果返回的是乙個列表

用於替換匹配的字串

s = "123wdjwd456rte"

n_s = re.sub('\d+','python',s,1)

print(n_s)

結果:

pythonwdjwd456rte

注:1表示是替換的次數

6.split(pattern, string, maxsplit=0, flags=0)

根據指定匹配進行分組

content = "'1 - 2 * ((60-30+1*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2) )'"

new_content = re.split('\*', content)

# new_content = re.split('\*', content, 1)

print new_content

content = "'1 - 2 * ((60-30+1*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2) )'"

new_content = re.split('[\+\-\*\/]+', content)

# new_content = re.split('\*', content, 1)

print new_content

inpp = '1-2*((60-30 +(-40-5)*(9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2))'

inpp = re.sub('\s*','',inpp)

new_content = re.split('\(([\+\-\*\/]?\d+[\+\-\*\/]?\d+)\)', inpp, 1)

print new_content

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

非負整數 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正規表示式 編寫正規表示式

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