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