正規表示式

2021-09-11 06:40:11 字數 3092 閱讀 7311

正規表示式,又稱規則表示式。(英語:regular expression,在**中常簡寫為regex、regexp或

re),電腦科學的乙個概念。正規表示式通常被用來檢索、替換那些符合某個模式(規則)的文字。

*				代表乙個或多個字元

? 代表單個字元

. 當前目錄

.. 當前目錄的上一級目錄

[0-9] 單個字元為0~9

[a-z] 小寫字母

[a-z] 大寫字母

[a-za-z] 字母

[0-9a-za-z] 字母及數字

[\u4e00-\u9fa5] 中文

3.1 match方法:

match嘗試從字串的起始位置開始匹配;

- 如果起始位置沒有匹配成功, 返回none;

- 如果起始位置匹配成功, 返回乙個物件

aobj = re.match(r'we', 'wetoshello')

print(aobj)

print(aobj.group())

bobj = re.match(r'\d', '1westos')

if bobj:

print(bobj.group())

bobj = re.match(r'\d', '_westos')

if bobj:

print(bobj.group())

3.2 findall方法:

findall會掃瞄整個字串, 獲取匹配的所有內容;

res = re.findall(r'\d\d', '閱讀數為2 點讚數為10+30')

print(res)

3.3 search方法:

search方法會掃瞄整個字串, 只返回第乙個匹配成功的內容的sre物件;

- 如果起始位置沒有匹配成功, 返回none;

- 如果起始位置匹配成功, 返回乙個物件, 通過group方法獲取匹配的內容;

resobj = re.search(r'\d', '閱讀數為8+2 點讚數為10')

if resobj:

print(resobj.group())

3.4 字串匹配:

. 匹配除了\n之外的任意字元; [.\n]

\d digit--(數字), 匹配乙個數字字元, 等價於[0-9]

\d 匹配乙個非數字字元, 等價於[^0-9]

\s space(廣義的空格: 空格, \t, \n, \r), 匹配單個任何的空白字元;

\s 匹配除了單個任何的空白字元;

\w 字母數字或者下劃線, [a-za-z0-9_]

\w 除了字母數字或者下劃線, [^a-za-z0-9_]

示例: pattern = r'[^a-za-z0-9_]'

string = "hello_1$%"

print(re.findall(pattern, string))

3.5 匹配字串出現次數:

* 代表前乙個字元出現0次或者無限次; \d*, .*

+ 代表前乙個字元出現一次或者無限次; d+

? 代表前乙個字元出現1次或者0次; 假設某些字元可省略, 也可以不省略的時候使用

前乙個字元出現m次;

前乙個字元至少出現m次; * == ; + ===

前乙個字元出現m次到n次; ? ===

^ 以什麼開頭

如果沒有在裡面的時候, 代表以什麼開頭;

如果在裡面的時候,代表除了...之外;

$ 以什麼結尾

示例:re.findall(r'^h.*?l.*?d$', "hello word")

3.6 特殊字元轉義:

+, ?, (, ), *, . 有特殊含義,在匹配時要對其進行轉義,在前面加上\

3.7 分組操作:

進行分組的時候, findall方法只返回分組裡面的內容;

| 匹配| 左右任意乙個表示式即可

print(re.findall(word|hello', "helloword"))

(ab) 將括號中的字元作為乙個分組

group方法會返回匹配的所有內容:

print(sreobj.group())

groups方法返回分組裡面的內容:

print(sreobj.groups())

\num 引用分組第num個匹配到的字串

htmlstr = "hello word

" pattern = r'<(\w+)><(\w+)>(.+)'

print(re.findall(pattern, htmlstr))

print(re.findall(pattern, htmlstr)[0][2])

(?p) 分組起別名

(?p=name) 引用分組的別名

htmlstr = "hello word

" pattern = r'<(?p\w+)><(?p\w+)>(?p.+)' \

r''print(re.findall(pattern, htmlstr))

sreobj = re.search(pattern, htmlstr)

if sreobj:

print(sreobj.group())

print(sreobj.groups())

print(sreobj.groupdict())

print(sreobj.groupdict()['text'])

3.8 字串的替換與分離:

s = 'i am a boy'

s.replace('boy', 'boy')

re.sub(r'(i|boy)', 'someone', s)

s2 = '1+2=3'

re.split(r'[+=]', s2)

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

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

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