正則表達式是一種工具,它定義了字符串的匹配模式(如何檢查一個字符串是否有跟某種模式匹配的部分或者從一個字符串中將與模式匹配的部分提取出來或者替換掉)。
https://deerchao.cn/tutorials/regex/regex.htm
正則表達式模式語法
符號 | 解釋 | 示例 | 說明 |
---|---|---|---|
. |
匹配任意字符 | b.t | 可以匹配bat / but / b#t / b1t等 |
\w |
匹配數字/字母/下劃線 | b\wt | b\wt 可以匹配bat / b1t / b_t等但不能匹配b#t |
\s |
匹配空白字符,包括\r、\t、\n等 | love\syou | 可以匹配love you |
\d |
匹配數字 | \d\d | 可以匹配01 / 23 / 99等 |
\b |
匹配單詞的邊界 | \bThe\b | |
^ |
匹配字符串的開始 | ^The | 可以匹配The開頭的字符串 |
$ |
匹配字符串的結束 | .exe$ | 可以匹配.exe結尾的字符串 |
\W |
匹配非字母/數字/下劃線 | b\Wt | 可以匹配b#t / b@t等,但不能匹配but / b1t / b_t等 |
\S |
匹配非空白字符 | love\Syou | 可以匹配love#you等,但不能匹配love you |
\D |
匹配非數字 | \d\D | 可以匹配9a / 3# / 0F等 |
\B |
匹配非單詞邊界 | \Bio\B | |
[] |
匹配來自字符集的任意單一字符 | [aeiou] | 可以匹配任一元音字母字符 |
[^] |
匹配不在字符集中的任意單一字符 | [^aeiou] | 可以匹配任一非元音字母字符 |
* |
匹配0次或多次 | \w* | |
+ |
匹配1次或多次 | \w+ | |
? |
匹配0次或1次 | \w? | |
{N} |
匹配N次 | \w{3} | |
{M,} |
匹配至少M次 | \w{3,} | |
{M,N} |
匹配至少M次至多N次 | \w{3,6} | |
\ |
分支 | foo\ | |
(?#) |
註釋 | ||
(exp) |
匹配exp並捕獲到自動命名的組中 | ||
(? <name>exp) |
匹配exp並捕獲到名爲name的組中 | ||
(?:exp) |
匹配exp但是不捕獲匹配的文本 | ||
(?=exp) |
匹配exp前面的位置 | \b\w+(?=ing) | 可以匹配I’m dancing中的danc |
(?<=exp) |
匹配exp後面的位置 | (?<=\bdanc)\w+\b | 可以匹配I love dancing and reading中的第一個ing |
(?!exp) |
匹配後面不是exp的位置 | ||
(?<!exp) |
匹配前面不是exp的位置 | ||
*? |
重複任意次,但儘可能少重複 | a.*b a.*?b | 將正則表達式應用於aabab,前者會匹配整個字符串aabab,後者會匹配aab和ab兩個字符串 |
?? |
重複0次或1次,但儘可能少重複 | ||
{M,N}? |
重複M到N次,但儘可能少重複 | ||
{M,}? |
重複M次以上,但儘可能少重複 |
ps:本片博文大部分內容爲作者收集整理而成,用於日常學習,並非個人原創,感謝駱昊先生的分享,以及定時更新!努力向您看齊!
說明: 如果需要匹配的字符是正則表達式中的特殊字符,那麼可以使用
\
進行轉義處理,例如想匹配小數點可以寫成\.
就可以了,因爲直接寫.會匹配任意字符;同理,想匹配圓括號必須寫成\(
和\)
,否則圓括號被視爲正則表達式中的分組。
python中re模塊
Python 中使用re模塊支持正則表達式,以下是re模塊中的核心函數
函數 | 說明 |
---|---|
compile(pattern, flags=0) | 編譯正則表達式返回正則表達式對象 |
match(pattern, string, flags=0) | 用正則表達式匹配字符串 成功返回匹配對象 否則返回None |
search(pattern, string, flags=0) | 搜索字符串中第一次出現正則表達式的模式 成功返回匹配對象 否則返回None |
split(pattern, string, maxsplit=0, flags=0) | 用正則表達式指定的模式分隔符拆分字符串 返回列表 |
sub(pattern, repl, string, count=0, flags=0) | 用指定的字符串替換原字符串中與正則表達式匹配的模式 可以用count指定替換的次數 |
fullmatch(pattern, string, flags=0) | match函數的完全匹配(從字符串開頭到結尾)版本 |
findall(pattern, string, flags=0) | 查找字符串所有與正則表達式匹配的模式 返回字符串的列表 |
finditer(pattern, string, flags=0) | 查找字符串所有與正則表達式匹配的模式 返回一個迭代器 |
purge() | 清除隱式編譯的正則表達式的緩存 |
re.I / re.IGNORECASE | 忽略大小寫匹配標記 |
re.M / re.MULTILINE | 多行匹配標記 |
import re
def main():
username = input('請輸入用戶名: ')
qq = input('請輸入QQ號: ')
# match函數的第一個參數是正則表達式字符串或正則表達式對象
# 第二個參數是要跟正則表達式做匹配的字符串對象
m1 = re.match(r'^[0-9a-zA-Z_]{6,20}$', username)
if not m1:
print('請輸入有效的用戶名.')
m2 = re.match(r'^[1-9]\d{4,11}$', qq)
if not m2:
print('請輸入有效的QQ號.')
if m1 and m2:
print('你輸入的信息是有效的!')
if __name__ == '__main__':
main()
原始字符串”
r
就是字符串中的每個字符都是它原始的意義,說得更直接一點就是字符串中沒有所謂的轉義字符