- 正則表達式在各種語言中基本都通用
- 正則表達式就是找到我們需要數據的一種規則
python使用正則表達式
正則表達式
1.匹配單個字符
字符 |
功能 |
. |
匹配任意1個字符(除了\n) |
[ ] |
匹配[ ]中列舉的字符 |
\d |
匹配數字,即0-9 |
\D |
匹配非數字,即不是數字 |
\s |
匹配空白,即 空格,tab鍵 |
\S |
匹配非空白 |
\w |
匹配單詞字符,即a-z、A-Z、0-9、_/中文 |
\W |
匹配非單詞字符 |
2.匹配多個字符
- 匹配多個字符,匹配的是次數,需要和其它字符或匹配結合使用
字符 |
功能 |
* |
匹配前一個字符出現0次或者無限次,即可有可無 |
+ |
匹配前一個字符出現1次或者無限次,即至少有1次 |
? |
匹配前一個字符出現1次或者0次,即要麼有1次,要麼沒有 |
{m} |
匹配前一個字符至少出現m次 |
{m,n} |
匹配前一個字符出現從m到n次 |
re.match(r".*", 待匹配字符, re.S)
這樣就可以匹配到換行符,re.S叫做旗標
3.判斷開頭結尾
- 開頭結尾必須全匹配上
- match默認會判斷開頭,但是不會判斷結尾
1>小練習:判斷變量名是否合法
name = input("請輸入變量名")
re.match(r"^[a-zA-Z_][a-zA-Z0-9_]*$", name)
2>小練習:判斷是否是身份證號
UID = input("請輸入變量名")
re.match(r"\d{17}[01X]$", UID)
3>小練習:判斷是否是郵箱
email = input("請輸入變量名")
re.match(r"^[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+$", email)
4.分組
email = input("請輸入變量名")
re.match(r"^[a-zA-Z0-9]+@(163|126|qq)\.com$", email)
字符 |
功能 |
| |
匹配左右任意一個表達式 |
(ab) |
將括號中字符作爲一個分組 |
\num |
引用分組num匹配到的字符串 |
(?P) |
分組起別名 |
(?P=name) |
引用別名爲name分組匹配到的字符串 |
- 在組 當中取數據:(取出的是小括號裏,正則匹配到的值)
- 取出匹配的組值
\num
- 給分組取名
(?P<name>)
,取用別名(?P=name)
4.re的高級用法
- 前面的用法是通用的,後面的用法是python專用的(其它語言也可能有)
search
- match是從頭開始匹配,search是任意位置開始匹配,只取第一個匹配到的位置
findall
- findall可以匹配到所有匹配的位置,返回一個列表
sub
re.sub(r"待替換", "替換爲", "待匹配的字符串")
def add1(temp):
"""加一函數"""
num_str = temp.group()
num = int(num_str) + 1
return str(num)
ret = re.sub(r"\d+", add1, "998")
print(ret)
split
re.split(r";|:","一個;兩個:三個")
5.小項目:清洗數據
- 從網上Down下一段網站的部分源碼(我是去Boss直聘Down下了阿里的職位描述)
- 分析一波:清洗掉標籤,可以用sub
- 效果: