您現在的位置是:首頁 > 武術

看了正則表示式不再難

  • 由 阿牛s 發表于 武術
  • 2021-05-16
簡介search(reg,‘abc123cd’)print(s)結果找到第一個數值“1”2、字元“+”重複前面一個匹配字元一次或者多次例如:import rere = r“d+”s = re

正則表示式獲得結果怎麼選擇

看了正則表示式不再難

先來介紹正則的基礎概念:正則表示式(regular expression)描述了一種字串匹配的模式(pattern),可以用來檢查一個串是否含有某個子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。

接下來上案例:

1、字元“\d”匹配0-9之間的一個數值。

例如:

import rere = r“\d”s = re。search(reg,‘abc123cd’)print(s)

結果找到第一個數值“1”

<_sre。SRE_Match object; span=(3, 4), match=‘1’>

2、字元“+”重複前面一個匹配字元一次或者多次

例如:

import rere = r“\d+”s = re。search(reg,‘abc123cd’)print(s)結果找到了‘123’<_sre。SRE_Match object; span=(3, 7), match=‘b123’>

3、字元“*”重複前面一個匹配字元零次或者多次。 “*”與“+”類似,但有區別,

例如:

import re reg=r“ab+” m=re。search(reg,“acabc”) print(m) reg=r“ab*” m=re。search(reg,“acabc”) print(m)結果: <_sre。SRE_Match object; span=(2, 4), match=‘ab’> <_sre。SRE_Match object; span=(0, 1), match=‘a’>

由此可見 r“ab+”匹配的是“ab”,但是 r“ab*”匹配的是“a”,因為 r“ab*”表示“b”可以重複 零次,但是“+”卻要求“b”重複一次以上

4、字元“?”重複前面一個匹配字元零次或者一次。

例如:

import re reg=r“ab?” m=re。search(reg,“abbcabc”) print(m) 結果: <_sre。SRE_Match object; span=(0, 2), match=‘ab’> 匹配結果是“ab”,其中 b 重複一次。

5、字元“。”代表任何一個字元,但是沒有特別宣告時不代表字元“\n”。

例如:

import re s=“xaxby” m=re。search(r“a。b”,s) print(m) 結果“。”代表了字元“x” <_sre。SRE_Match object; span=(1, 4), match=‘axb’>

6、“|”代表把左右分成兩個部分。

例如:

import re s=“xaabababy” m=re。search(r“ab|ba”,s) print(m) 結果匹配“ab”或者“ba”都可以: <_sre。SRE_Match object; span=(2, 4), match=‘ab’>

7、特殊字元使用反斜線“\”引導,例如“\r”、“\n”、“\t”、“\\”分別表示回車、換行、制 表符號與反斜線自己本身。

例如:

import re reg=r“a\nb?” m=re。search(reg,“ca\nbcabc”)print(m) 結果匹配“a\n\b”: <_sre。SRE_Match object; span=(1, 4), match=‘a\nb’>

8、字元“\b”表示單詞結尾,單詞結尾包括各種空白字元或者字串結尾。

例如:

import re reg=r“car\b” m=re。search(reg,“The car is black”) print(m) 結果匹配“car”,因為“car”後面是以個空格: <_sre。SRE_Match object; span=(4, 7), match=‘car’>

9、“[]”中的字元是任選擇一個,如果字元是 ASCII 碼中連續的一組,那麼可以使用“-” 符號連線,例如[0-9]表示 0-9 的其中一個數字,[A-Z]表示 A-Z 的其中一個大寫字元,[0-9A-Z] 表示 0-9 的其中一個數字或者是 A-Z 的其中一個大寫字元。

例如:

import re reg=r“x[0-9]y” m=re。search(reg,“xyx2y”) print(m) 結果匹配“x2y”: <_sre。SRE_Match object; span=(2, 5), match=‘x2y’>

10、“^”出現在[]的第一個字元位置,就代表取反,例如[^ab0-9]表示不是 a、b,也不是 0-9 的數字。

例如:

import re reg=r“x[^ab0-9]y” m=re。search(reg,“xayx2yxcy”) print(m) 結果匹配“xcy”: <_sre。SRE_Match object; span=(6, 9), match=‘xcy’>

11、“\s”匹配任何空白字元,等價“[\r\n\x20\t\f\v]”。

例如:

import re s=“1a ba\tbxy” m=re。search(r“a\sb”,s) print(m) 結果匹配“a b”: <_sre。SRE_Match object; span=(1, 4), match=‘a b’>

12、“\w”匹配包括下劃線內的單詞字元,等價於“[a-zA-Z0-9_]”。

例如:

import re reg=r“\w+” m=re。search(reg,“Python is easy”) print(m) 結果匹配“Python”: <_sre。SRE_Match object; span=(0, 6), match=‘Python’>

13、“^”匹配字串的開頭位置。

例如:

import re reg=r“^ab” m=re。search(reg,“cabcab”) print(m) 結果: None 沒有匹配到任何字元,因為“cabcab”中雖然有“ab”,但不是“ab”開頭。

14、“$”字元匹配字串的結尾位置。

例如:

import re reg=r“ab$” m=re。search(reg,“abcab”) print(m) 匹配結果是最後一個“ab”,而不是第一個“ab”: <_sre。SRE_Match object; span=(3, 5), match=‘ab’>

15、使用括號(。。。)可以把(。。。)看成一個整體,經常與“+”、“*”、“?”的連續使用,對(。。。)部 分進行重複。

例如:

import re reg=r“(ab)+” m=re。search(reg,“ababcab”) print(m) 結果匹配“abab”,“+”對“ab”進行了重複: <_sre。SRE_Match object; span=(0, 4), match=‘abab’>

看了正則表示式不再難

看過這15中情況,大家按照這幾種情況在多加練習,基本是可以應付所有需要匹配的問題,也相信大家看了以後必定能有所很大進步。

同樣我也做了正則的思維導圖,也是非常清晰的裡面有Re的功能函式,需要的可以聯絡。

看了正則表示式不再難

歡迎各位進行評論交流。

Top