正則表達式


1 簡介/動機

正則表達式 :為高級的文本模式匹配、抽取、與/或文本形式的搜索和替換功能提供了基礎。
Python 通過標准的re模塊來支持正則表達式。

注意:此處我們提到的搜索和匹配意義不一樣

你的第一個正則表達式

正則表達式 匹配的字符串
foo foo
Python Python
abc123 abc123
666 666

2 符號和字符

元字符 賦予正則表達式強大的功能和靈活性。

舉例

表示法 描述 正則表達式示例
literal 匹配文本字符串的字面值literal fool
re1/re2 匹配正則表達式re1或者re2 fool/bar
. 匹配任何字符(除\n) b.b
^ 匹配字符串起始部分 ^Dear
$ 匹配字符串終止部分 /bin/*sh$
* 匹配0次或多次前面出現的表達式 [A-Za-z0-9]*
+ 匹配1次或者多次前面出現的正則表達式 [a-z]+.com
? 匹配0次或者1次前面出現的正則表達式 gool?
{N} 匹配N次前面出現的表達式 [0-9]{3}
{M,N} 匹配M~N次前面出現的正則表達式 [0-9]{5,9}
[...] 匹配來自字符集任意單一字符 [aeiou]
[..x-y..] 匹配x-y范圍中的任意單一字符 [0-9],[A-Za-z]
[^...] 不匹配此字符集出現的任意一個字符 [aeiou][A-Za-z]
(*|+|?|{})? 用於匹配上面頻繁出現符號的非貪婪版本 .*?[a-z]
(...) 匹配封閉式的正則表達式,然后另存為子組 ([0-9]{3})?,f(oo|u)bar
\d 匹配任何十進制數字,\D與之相反 data\d+.txt
\w 匹配任何字母數字字符,\W與之相反 [A-Za-z
\s 匹配任何空格字符,與[\n\t\r\v\f]相同(\S與之相反) of\sthe
\b 匹配任何單詞邊界(\B與之相反) \bThe\b
\N 匹配已保存的子組 N (參見上面的(...) price:\16
\c 逐字匹配任何特殊字符c \.,\*
A(\Z) 匹配字符串的起始(結束) \ADear

2.1 使用擇一匹配符號匹配多個正則表達式模式

擇一匹配的管道符號(|)表示從”從多個模式選擇其一的操作

正則表達式模式 匹配的字符串
at | home at、home
r2d2 | \c3po r2d2、c3po
bat | bet | bit bat、bet、bit

擇一匹配符號(|) 也稱作並(union)或邏輯或(logical OR)

2.2 匹配任意單個字符

點號(.)匹配除了換行符(\n)以外的任意字符。

注意:匹配句點或者句號,必須使用反斜杠轉義句點符號的功能(\.)

2.3 從字符串起始或者結尾或者單詞邊界匹配

匹配字符串的開始位置:^、\A
匹配字符串的末尾位置:$、\Z

注意:匹配一個字符串(^Subject:hi$)

匹配一個單詞的邊界:\b, \B

注意:\bthe表示任何以the為起始的字符串
\Bthe表示任何包含但不以the為起始的字符串

2.4 創建字符集

[ ] 用來創建特定字符集,它的功能類似 |,例如[ab] = a | b

注意:[ab][c] 匹配 ac 或 bc, 不同於 ab | c

2.5 限定范圍和否定

除了單字符以外,字符集還支持匹配指定的字符范圍,涉及連字符(-)和脫字符(^)。

注意:[a-z]表示a-z任意一個;[^aeiou]表示一個非元音字符

2.6 使用閉包操作符實現存在性和頻數匹配

閉包操作符:*、+

注意:貪婪匹配時默認匹配盡可能多字符,閉包操作符是貪婪的,?是非貪婪的

2.7 表示字符集的特殊字符

特殊字符也可以表示字符集,例如 \d 表示 [0-9],\w 表示 [A-Za-z0-9]等。

注意:這些特殊字符的大寫表示意義恰恰相反,表不匹配

2.8 使用圓括號指定分組

圓括號的兩個功能:

  1. 對正則表達式進行分組
  2. 匹配子組

注意:匹配子組是為了看到匹配表達模式的字符串各部分內容,例如,(\w+)-(\d+)可以分別訪問每一個子組

2.9 擴展表示法

擴展表示法的模式:(?p )表一個分組

注意:擴展表示法往往表條件,例如,(?=.com) 表示如果后面跟着 ".com" 才做匹配操作


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM