python 正規表示式使用

2021-10-05 06:39:13 字數 4763 閱讀 5124

場景:替換很多動態資料的時候,會重複很多的條件判斷if,replace。

作用:完成多步,同時去匹配符合特定規則的字串,完成通用的正則匹配

正規表示式是一種通用的字串匹配技術,是不會因為程式語言不同發生變化。

想要查詢某種特徵的,具有一定規則的字串,都是可以嘗試使用正規表示式

jsonpath,xpath解析相關

如何進行匹配?

匹配的方式:只是python當中的封裝,re庫,三種模式

-match

-search

-findall

語法:

. 匹配任意乙個字元

{} 匹配多個

*匹配0次或者任意次

? 匹配0次或者1次 - -非貪念模式

python內建的是貪念模式

match:表示匹配開頭

# 匹配特定的字串"abc"

import re

re_pattern = r"abc"

# 從"abcdefabc" 這個字串中匹配是否包含正規表示式re_pattern所包含的這個字串

res = re.match(re_pattren,

"abcdefabc"

)# 物件表示匹配的範圍不包含3,找不到返回none

search:表示全文匹配

import re

re_pattern = r"abc"

res = re.match(re_pattren,

"abcdefabc"

)# 只匹配一次

res = re.search(re_pattren,

"abdefabc"

)#

findall:表示全部匹配

import re

re_pattern = r"abc"

res = re.findall(re_pattren,

"abcdefabc"

)# ['abc', 'abc'] 缺點 不知道位置

- 匹配[abc]中的任意乙個字元

import re

re_parttern = r"[abc]"

res = re.findall(re_parttern,

"abcdefabc"

)# ['a', 'b', 'c', 'a', 'b', 'c']

擴充套件:[0-9] - 匹配0-9範圍中的任意乙個數字 - [a-z]、[a-z]

re_pattern = r"[0-9]"

res = re.findall(re_pattern,

"123_abc0"

)# ['1', '2', '3', '0']

. 匹配任意乙個字元。除了\n

import re

re_pattern = r"."

res = re.findall(re_pattern,

"abcdefabc\n"

)# ['a', 'b', 'c', 'd', 'e', 'f', 'a', 'b', 'c']

{} 匹配任意乙個字元。除了\n

\d 表示匹配任意乙個數字 - 擴充套件[0-9]表示範圍

\d 表示匹配任意乙個非數字

import re

re_pattern = r"\d"

res = re.findall(re_pattern,

"123_abc"

)# ['1', '2', '3']

\w 表示匹配任意乙個字母,數字,下劃線。等價於[a-za-z0-9]

\w 表示匹配非字母數字下劃線

import re

re_pattern = r"\w"

res = re.findall(re_parttern,

"123_abcdefabc\n"

)# ['1', '2', '3', '_', 'a', 'b', 'c', 'd', 'e', 'f', 'a', 'b', 'c']

\w 表示匹配字母 數字 下劃線,匹配m次

\d 表示匹配數字,匹配m次

import re

re_pattern = r"\w"

res = re.findall(re_parttern,

"12@3@_abcdef@a"

)# ['12', '_a', 'bc', 'de'] 匹配不到會斷開重新匹配

** 表示匹配至少兩次 兩次以上**

# 貪婪模式  python當中預設是貪婪模式

re_pattern = r"\w"

res = re.findall(re_pattern,

"aa#b##123dfs_")#

# ['aa', '123dfs_']

** 表示匹配最多兩次 – 包括0次**

# 貪婪模式  python當中預設是貪婪模式

re_pattern = r"\w"

res = re.findall(re_pattern,

"aa#b##123dfs_")#

# ['aa', '', 'b', '', '', '12', '3d', 'fs', '_', '']

** 表示匹配2-4次**

# 匹配2-4次

re_pattern = r"\w"

res = re.findall(re_pattern,

"aa#b##123dfs_"

)# ['aa', '123dfs_']

print

(res)

# ['aa', '123d', 'fs_']

** 表示匹配0次或者任意次,萬用字元 – 資料庫 discover**

re_pattern = r"\d*"

res = re.findall(re_pattern,

"aa#b#18511111111#123dfs_"

)print

(res)

# ['', '', '', '', '', '18511111111', '', '123', '', '', '', '', '']

** +表示匹配0次或者任意次**

re_pattern = r"\d+"

res = re.findall(re_pattern,

"a1a#b#18511111111#123dfs_"

)print

(res)

# ['1', '18511111111', '123']

** 組合 \d. **

re_pattern = r"\d."

res = re.findall(re_pattern,

"a1a#b#18511111111#123dfs_"

)# ['aa', '123dfs_']

print

(res)

# ['1a', '18', '51', '11', '11', '11', '1#', '12', '3d']

? 表示式後面加? 可以表示非貪念模式,盡量少的匹配,包括0

re_pattern = r"\d?"

res = re.findall(re_pattern,

"a1a18#12dfs_"

)print

(res)

# ['', '1', '', '1', '8', '', '1', '2', '', '', '', '', '']

**^開頭**

```python

re_pattern = r"^\d"

res = re.findall(re_pattern, "aa#b#18511111111#123dfs_") # ['aa', '123dfs_']

print(res) # [''] 以\d開頭 但是沒有,所以為 ['']

結尾$

re_pattern = r"\d*$"

res = re.findall(re_pattern,

"aa#b#18511111111#123dfs_22"

)# ['aa', '123dfs_']

print

(res)

# ['22', ''] 這個代了*號了 有0次

import re

re_pattern = r"1[35789]\d"

res = re.findall(re_pattern,

"aa#b#18511111111#123dfs_"

)print

(res)

# ["18511111111"]

python正規表示式及使用正規表示式的例子

正規表示式 正則表達用來匹配字串 正規表示式匹配過程 正規表示式語法規則 匹配除換行 n 外的任意字串 abcabc 轉義字元,使後乙個字元改變原來的意思 a c a c 字符集,對應的位置可以是字符集中任意字元,字符集中的字元可以逐個列出,也可以給出範圍,如 abc 或 a c 第乙個字元如果是 ...

Python正規表示式使用

python正規表示式使用 正規表示式不是python內建的功能,所以需要引入import re模組才可以使用。正規表示式的功能很多,但是我們通常使用的功能也就是那幾個,這裡對工作中經常使用到的正規表示式進行乙個系統的總結。1.字元 匹配除了換行符 n 外的字元 轉義字元,使後乙個字元改變以前的意思...

Python正規表示式使用

python通過re模組提供對正規表示式的支援 使用re的一般步驟是先將正規表示式的字串形式 編譯為pattern例項,然後使用pattern例項處理文字並獲得匹配結果,最後使用match 例項獲得資訊,進行其他操作。主要用到的方法列舉如下 首先說一 下re 中compile 函式,它將乙個正規表示...