場景:替換很多動態資料的時候,會重複很多的條件判斷if,replace。
作用:完成多步,同時去匹配符合特定規則的字串,完成通用的正則匹配
正規表示式是一種通用的字串匹配技術,是不會因為程式語言不同發生變化。
想要查詢某種特徵的,具有一定規則的字串,都是可以嘗試使用正規表示式
jsonpath,xpath解析相關
如何進行匹配?
匹配的方式:只是python當中的封裝,re庫,三種模式
-match
-search
-findall
語法:
. 匹配任意乙個字元match:表示匹配開頭{} 匹配多個
*匹配0次或者任意次
? 匹配0次或者1次 - -非貪念模式
python內建的是貪念模式
# 匹配特定的字串"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 函式,它將乙個正規表示...