前言
在Python中需要通過正則表達式對字符串進行匹配的時候,可以使用一個模塊,名字爲re
正則用處很多,比如把爬取的數據抽取出來。
re模塊操作
# 導入re模塊
import re
# 使用match方法進行匹配操作
result = re.match(正則表達式,要匹配的字符串)
# 如果上一步匹配到數據的話,可以使用group方法來提取數據
result.group()
re模塊示例(匹配以itcast開頭的語句)
#coding=utf-8
import re
result = re.match("itcast","itcast.cn")
result.group()
運行結果爲:
itcast
re.match() 能夠匹配出以xxx開頭的字符串
匹配單個字符
字符 | 功能 |
---|---|
. | 匹配任意一個字符(非\n) |
[] | 匹配[]裏的字符 |
\d | 匹配0-9 |
\D | 匹配非0-9 |
\s | 匹配空白,即空格,tap鍵 |
\S | 匹配非空白 |
\w | 匹配單詞字符,即a-zA-Z 0-9 _ |
\W | 匹配非單詞字符 |
說明:[]裏面的字符不需要加逗號隔開,如果是連續的,比如說1,2,3,4可以寫成,[1-4]
例子:
#coding=utf-8
import re
# 如果hello的首字符小寫,那麼正則表達式需要小寫的h
ret = re.match("h","hello Python")
print(ret.group())
# 如果hello的首字符大寫,那麼正則表達式需要大寫的H
ret = re.match("H","Hello Python")
print(ret.group())
# 大小寫h都可以的情況
ret = re.match("[hH]","hello Python")
print(ret.group())
ret = re.match("[hH]","Hello Python")
print(ret.group())
ret = re.match("[hH]ello Python","Hello Python")
print(ret.group())
# 匹配0到9第一種寫法
ret = re.match("[0123456789]Hello Python","7Hello Python")
print(ret.group())
# 匹配0到9第二種寫法
ret = re.match("[0-9]Hello Python","7Hello Python")
print(ret.group())
ret = re.match("[0-35-9]Hello Python","7Hello Python")
print(ret.group())
# 下面這個正則不能夠匹配到數字4,因此ret爲None
ret = re.match("[0-35-9]Hello Python","4Hello Python")
# print(ret.group())
匹配多個字符
注意:匹配多個字符說的都是前
一個字符出現的次數或頻率
例1
需求:匹配出,變量名是否有效
#coding=utf-8
import re
names = ["name1", "_name", "2_name", "__name__"]
for name in names:
ret = re.match("[a-zA-Z_]+[\w]*",name)
if ret:
print("變量名 %s 符合要求" % ret.group())
else:
print("變量名 %s 非法" % name)
運行結果:
變量名 name1 符合要求
變量名 _name 符合要求
變量名 2_name 非法
變量名 __ name __ 符合要求
匹配開頭結尾
例子
需求:匹配163.com的郵箱地址
#coding=utf-8
import re
email_list = ["[email protected]", "[email protected]", "[email protected]"]
for email in email_list:
ret = re.match("[\w]{4,20}@163\.com", email)
if ret:
print("%s 是符合規定的郵件地址,匹配後的結果是:%s" % (email, ret.group()))
else:
print("%s 不符合要求" % email)
運行結果:
[email protected] 是符合規定的郵件地址,匹配後的結果是:[email protected]
[email protected] 是符合規定的郵件地址,匹配後的結果是:[email protected]
[email protected] 不符合要求
完善後:
email_list = ["[email protected]", "[email protected]", "[email protected]"]
for email in email_list:
ret = re.match("[\w]{4,20}@163\.com$", email)
if ret:
print("%s 是符合規定的郵件地址,匹配後的結果是:%s" % (email, ret.group()))
else:
print("%s 不符合要求" % email)