例題:URL
1 import re 2 def url(string: str) -> list : 3 # 含括號匹配時不作處理僅返回括號內容 4 # 在括號前假設?:后返回所有元素 5 result = re.findall(r'(?:https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]', string) 6 return result 7 st = input() 8 print(url(st))
r:帶'r'
前綴的字符串,反斜杠無效。 如 r"\n"
表示包含 '\'
和 'n'
兩個字符的字符串,而 "\n"
則表示只包含一個換行符的字符串
Python 正則表達式 | 菜鳥教程 (runoob.com)
(2條消息) python——正則表達式(re模塊)詳解_guo_qingxia的博客-CSDN博客_python re
re.findall函數
在字符串中找到正則表達式所匹配的所有子串,並返回一個列表,如果沒有找到匹配的,則返回空列表。
1 舉例: 2 3 import re 4 ret = re.findall(r"\d+", "python = 9999, c = 7890, c++ = 12345") 5 print(ret) 6 結果: 7 8 ['9999', '7890', '12345']
匹配單個字符
字符 功能 位置
. 匹配任意1個字符(除了\n)
[ ] 匹配[ ]中列舉的字符
\d 匹配數字,即0-9 可以寫在字符集[...]中
\D 匹配⾮數字,即不是數字 可以寫在字符集[...]中
\s 匹配空⽩,即空格,tab鍵 可以寫在字符集[...]中
\S 匹配⾮空⽩字符 可以寫在字符集[...]中
\w 匹配單詞字符,即a-z、A-Z、0-9、_ 可以寫在字符集[...]中
\W 匹配⾮單詞字符 可以寫在字符集[...]中
\w \w 匹配單詞字符,即a-z、A-Z、0-9、_
\W 匹配⾮單詞字符
————————————————
匹配多個字符
字符 功能 位置 表達式實例 完整匹配的字符串
* 匹配前⼀個字符出現0次或者⽆限次,即可有可⽆ 用在字符或(...)之后 abc* abccc
+ 匹配前⼀個字符出現1次或者⽆限次,即⾄少有1次 用在字符或(...)之后 abc+ abccc
? 匹配前⼀個字符出現1次或者0次,即要么有1次,要么沒有 用在字符或(...)之后 abc? ab,abc
{m} 匹配前⼀個字符出現m次 用在字符或(...)之后 ab{2}c abbc
{m,n} 匹配前⼀個字符出現從m到n次,若省略m,則匹配0到n次,若省略n,則匹配m到無限次 用在字符或(...)之后 ab{1,2}c abc,abbc
flags : 可選,表示匹配模式,比如忽略大小寫,多行模式等,具體參數為:
- re.I 忽略大小寫
- re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴於當前環境
- re.M 多行模式
- re.S 即為 . 並且包括換行符在內的任意字符(. 不包括換行符)
- re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴於 Unicode 字符屬性數據庫
- re.X 為了增加可讀性,忽略空格和 # 后面的注釋
匹配開頭結尾
字符 | 功能 |
^ | 匹配字符串開頭 |
$ | 匹配字符串結尾 |