mysql 元字元 正規表示式 元字元的使用

2021-10-18 10:02:05 字數 4760 閱讀 5849

一、基本簡介:

1. 定義:即文字的高階匹配模式,提供搜尋,替換等功能。其本質是由一系列字元和特殊符號構成的字串,這個字串即正規表示式。

2. 原理:通過普通字元和有特定含義的字元,來組成字串,用以描述一定的字串規則,比如:重複,位置等,來表達某類特定的字串,進而匹配。

3. 目標

熟練掌握正規表示式元字元

能夠讀懂常用正規表示式,編輯簡單的正則規則

能夠熟練使用re模組操作正規表示式

二、元字元使用:

1.普通字元:

匹配規則:每個普通字元匹配其對應的字元

例子:re.findall('ab',"abcdefabcd")

# ['ab', 'ab']

注意事項:正規表示式在python中也可以匹配中文

2.元字元:| (或關係)

匹配規則:匹配 | 兩側任意的正規表示式即可

例子:re.findall('com|cn',"www.baidu.com/www.tmooc.cn")

#['com', 'cn']

3.元字元:. (匹配單個元字元)

匹配規則:匹配除換行外的任意乙個字元

例子:re.findall('張.豐',"張三丰,張四豐,張五豐")

# ['張三丰', '張四豐', '張五豐']

4.元字元: [字符集]

匹配規則: 匹配字符集中的任意乙個字元

表達形式:

[abc#!好] 表示 中的任意乙個字元

[0-9],[a-z],[a-z] 表示區間內的任意乙個字元

[_#?0-9a-z]  混合書寫,一般區間表達寫在後面

例子:re.findall('[aeiou]',"how are you!")

# ['o', 'a', 'e', 'o', 'u']

5.元字元:[^字符集] (匹配反字符集)

匹配規則:匹配除了字符集以外的任意乙個字元

例子:re.findall('[^0-9]',"use 007 port")

#['u', 's', 'e', ' ', ' ', 'p', 'o', 'r', 't']

6.元字元:^           \a

匹配規則:匹配字串開始位置

例子:re.findall('^jame',"jame,hello")

#['jame']

7.元字元:$           \z

匹配規則:匹配目標字串的結尾位置

例子:re.findall('jame$',"hi,jame")

#['jame']

規則技巧: ^ 和 $必然出現在正規表示式的開頭和結尾處。如果兩者同時出現,則中間的部分必須匹配整個目標字串的全部內容。

8.元字元:*

匹配規則:匹配前面的字元出現0次或多次

例子:re.findall('wo*',"wooooo~~w!")

#['wooooo', 'w']

9.元字元:+

匹配規則:匹配前面的字元出現1次或多次

例子:re.findall('[a-z][a-z]+',"hello world")

#['hello', 'world']

10.元字元:?

匹配規則:匹配前面的字元出現0次或1次

例子:匹配手機號 re.findall('-?[0-9]+',"jame,age:18, -26")

#['18', '-26']

11.元字元:

匹配規則:匹配前面的字元出現n次

例子:re.findall('1[0-9]',"jame:13886495728")

#['13886495728']

12.元字元:

匹配規則: 匹配前面的字元出現m-n次

例子:匹配qq號 re.findall('[1-9][0-9]',"baron:1259296994")

#['1259296994']

13.元字元:\d   \d

匹配規則:\d 匹配任意數字字元,\d 匹配任意非數字字元

例子:匹配埠 re.findall('\d',"mysql: 3306, http:80")

#['3306', '80']

14.元字元:\w   \w

匹配規則:\w 匹配普通字元,\w 匹配非普通字元

說明: 普通字元指數字,字母,下劃線,漢字。

例子: re.findall('\w+',"server_port = 8888")

#['server_port', '8888']

15.元字元:\s   \s

匹配規則:\s 匹配空字元,\s 匹配非空字元

說明:空字元指 空格 \r \n \t \v \f 字元

例子: re.findall('\w+\s+\w+',"hello    world")

#['hello    world']

16.元字元:\s   \s

匹配規則:\s 匹配空字元,\s 匹配非空字元

說明:空字元指 空格 \r \n \t \v \f 字元

例子: re.findall('\w+\s+\w+',"hello    world")

#['hello    world']

17.元字元:\b   \b

匹配規則:\b 表示單詞邊界,\b 表示非單詞邊界

說明:單詞邊界指數字字母(漢字)下劃線與其他字元的交界位置。

例子:re.findall(r'\bis\b',"this is a test.")

#['is']

三、普通字符集的替換

正則擴充表示式

匹配\d

[0-9]

數字字元

\d[^0-9]

非數字字元

\w[a-za-z0-9]

數字字母下劃線

\w[^\w]

相反\s

[_\r\t\n\f]

**,換行等空白區域

\s[^\s]

非空白區域

四、計數符

正則匹配

零或多一或多

零或一出現n次

n到m次

至少n次

五、正規表示式的轉義

1. 如果使用正規表示式匹配特殊字元則需要加 \ 表示轉義。

特殊字元: . * + ? ^ $ () {} | \

匹配特殊字元 . 時使用 \. 表示本身含義

例子1:re.findall('-?\d+\.?\d*',"123,-123,1.23,-1.23")

#['123', '-123', '1.23', '-1.23']

例子2:s="2023年5月2日出生於中國,中國內地影視女演員-12,12.34,1/0,40%,-1.6"

r=re.findall('-?\d+\.?/?\d*%?',s)

#['1992', '5', '2', '-12', '12.34', '1/0', '40%', '-1.6']

2. 在程式語言中,常使用原生字串書寫正規表示式避免多重轉義的麻煩。

python字串  -->    正則    -->    目標字串

"\\$\\d+"   解析為   \$\d+   匹配   "$100"

"\\$\\d+"  等同於  r"\$\d+"

六、貪婪模式和非貪婪模式

貪婪模式: 預設情況下,匹配重複的元字元總是盡可能多的向後匹配內容。比如: *  +  ?  

非貪婪模式(懶惰模式): 讓匹配重複的元字元盡可能少的向後匹配內容。

貪婪模式轉換為非貪婪模式

在匹配重複元字元後加 '?' 號即可

*  :  *?  #1

+  :  +?  #1

?  :  ??  #0

: ?  #n

例子: re.findall(r'\(.+?\)',"(abcd)efgh(higk)")

# ['(abcd)', '(higk)']

七、正規表示式分組

1.定義:

在正規表示式中,以()建立正規表示式的內部分組,子組是正規表示式的一部分,可以作為內部整體操作物件。

2.作用:

(1)可以別作為整體操作,改變元字元的操作物件。

#(1)改變 +號 重複的物件

re.search(r'(ab)+',"ababababab").group()#'ababababab'#(2)改變 |號 操作物件

re.search(r'(王|李)\w',"王者榮耀").group()#'王者榮耀'

(2)可以通過程式語言某些藉口獲取陪陪內容中子組對應的內容部分

#獲取url協議型別

3.捕獲組:

可以給正規表示式的子組起乙個名字,表達該子組的意義。這種有名稱的子組即為捕獲組

格式:"(?ppattern)"

#給子組命名為 "pig"

re.search(r'(?pab)+',"ababababab").group('pig')#'ab'

4.注意事項:

乙個正規表示式中可以包含多個子組

子組可以巢狀,但是不要重疊或者巢狀結構複雜

子組序列號一般從外到內,從左到右計數

八、正規表示式原則

1.正確性,能夠正確的匹配出目標字串。

2.排他性,除了目標字串意外盡可能少的匹配其他內容。

3.全面性,盡可能考慮到目標字串的所有情況,不遺漏。

正規表示式(1) 元字元

數字 1 表示第n個元組中的內容 xu hao 1 re.search r a bca 1 abcabca print xu hao 1 abcabca bca 1 bcabca xu hao 2 re.search r a bca 2 abcabca print xu hao 2 abcabca ...

正規表示式 元字元

現在你已經知道幾個很有用的元字元了,如 b 還有 d 當然還有更多的元字元可用,比如 s 匹配任意的空白符,包括空格,製表符 tab 換行符,中文全形空格等 w匹配字母或數字或下劃線或漢字等。ba w b 匹配以字母a 開頭的單詞 先是某個單詞開始處 b 然後是字母a 然後是任意數量的字母或數字 w...

正規表示式 元字元

元字元 描述.點 匹配任何單個字元。例如正規表示式r.t匹配這些字串 rat rut r t,但是不匹配root。匹配行結束符。例如正規表示式weasel 能夠匹配字串 he s a weasel 的末尾 但是不能匹配字串 they are a bunch of weasels.匹配一行的開始。例如...