. 匹配任意1個(gè)字符(除了\n)
[ ] 匹配[ ]中列舉的字符
\d 匹配數(shù)字瑟幕,即0-9
\D 匹配非數(shù)字肌蜻,即不是數(shù)字
\s 匹配空白,即 空格,tab鍵
\S 匹配非空白
\w 匹配單詞字符椅邓,即a-z竖配、A-Z、0-9徒河、_
\W 匹配非單詞字符
* 匹配前一個(gè)字符出現(xiàn)0次或者無限次多律,即可有可無
+ 匹配前一個(gè)字符出現(xiàn)1次或者無限次痴突,即至少有1次
? 匹配前一個(gè)字符出現(xiàn)1次或者0次,即要么有1次狼荞,要么沒有
{m} 匹配前一個(gè)字符出現(xiàn)m次
{m,n} 匹配前一個(gè)字符出現(xiàn)從m到n次
^: 表示以什么字符串開頭
$ :表示以什么結(jié)尾
| 匹配左右任意一個(gè)表達(dá)式
(ab) 將括號中字符作為一個(gè)分組
\num 引用分組num匹配到的字符串
(?P<name>) 分組起別名
(?P=name) 引用別名為name分組匹配到的字符串
re.search() 只查找一個(gè)
re.findall() 查找所有匹配字符
re.sub() 替換字符
注意 盡量在正則表達(dá)式的外面加上r 如:r'\d+' 避免匹配中遇到\反斜杠轉(zhuǎn)義
模塊: import re
舉例:
匹配郵箱:
# 把郵箱類型作為一個(gè)分組: (分組數(shù)據(jù))
match_obj = re.match("[a-zA-Z0-9_]{4,20}@(163|126|qq|sina)\.com$", "hello@163.com")
if match_obj:
print(match_obj.group())
# 表示獲取第一個(gè)分組的數(shù)據(jù)
print(match_obj.group(1))
else:
print("匹配失敗")
匹配網(wǎng)頁地址:
方式一:
# <html>hh</html>
match_obj = re.match("<[a-zA-z0-9]+>.*</[a-zA-z0-9]+>", "<html>hh</html>")
if match_obj:
print(match_obj.group())
else:
print("匹配失敗")
方式二:
# 引用分組匹配的數(shù)據(jù): \num
match_obj = re.match(r"<([a-zA-z0-9]+)>.*</\1>", "<html>hh</html>")
if match_obj:
print(match_obj.group())
else:
print("匹配失敗")
匹配網(wǎng)頁地址:
import re
img_url = """<img alt="16圓圓兒的直播" data-original="https://rpic.douyucdn.cn/live-cover/appCovers/2018/04/15/3986928_20180415144934_big.jpg" src="https://rpic.douyucdn.cn/live-cover/appCovers/2018/04/15/3986928_20180415144934_big.jpg" width="283" height="163" class="JS_listthumb" style="display: block;">"""
# python默認(rèn)是貪婪的根據(jù)正則表達(dá)式盡量多匹配數(shù)據(jù)
# 使用非貪婪: 盡量根據(jù)正則少匹配數(shù)據(jù)辽装, 非貪婪的模式范圍正則表達(dá)式后面加上?: 比如*?, +?, ??
# 提示: 如果匹配的數(shù)據(jù)比預(yù)想的數(shù)據(jù)要多這個(gè)時(shí)候需要想到非貪婪 比如*?, +?, ??
match_obj = re.search(r"https?://.*?.jpg", img_url)
if match_obj:
result = match_obj.group()
print(result)
else:
print("匹配失敗")