Python基础07
正則表達式
1.點-匹配所有字符
. 表示要匹配除了 換行符 之外的任何 單個 字符。
content = """蘋果是綠色的 橙子是橙色的 香蕉是黃色的 烏鴉是黑色的""" # re模塊是python的內置模塊,提供了對于正則表達式的支持 import re # 正則表達式 p = re.compile(".色") # 在content里面使用正則表達式查找內容,將找到的內容賦值給變量 message = p.findall(content) print(message)2.星號-重復匹配任意次
* 表示匹配前面的子表達式任意次,包括0次。
content = """蘋果,是綠色的 橙子,是橙色的 香蕉,是黃色的 烏鴉,是黑色的 猴子,""" # re模塊是python的內置模塊,提供了對于正則表達式的支持 import re # 正則表達式 p = re.compile(",.*") # 在content里面使用正則表達式查找內容,將找到的內容賦值給變量 message = p.findall(content) print(message)3.加號-重復匹配多次
+ 表示匹配前面的子表達式一次或多次,不包括0次。
content = """蘋果,是綠色的 橙子,是橙色的 香蕉,是黃色的 烏鴉,是黑色的 猴子,""" # re模塊是python的內置模塊,提供了對于正則表達式的支持 import re # 正則表達式 p = re.compile(",.+") # 在content里面使用正則表達式查找內容,將找到的內容賦值給變量 message = p.findall(content) print(message)4.問號-匹配0-1次
? 表示匹配前面的子表達式0次或1次
content = """蘋果,綠色的 橙子,橙色的 香蕉,黃色的 烏鴉,黑色的 猴子,,""" # re模塊是python的內置模塊,提供了對于正則表達式的支持 import re # 正則表達式 p = re.compile(",.?") # 在content里面使用正則表達式查找內容,將找到的內容賦值給變量 message = p.findall(content) print(message)5.花括號-匹配指定次數
花括號表示 前面的字符匹配 指定的次數
content = """紅彤彤,綠油油,黑乎乎乎乎,綠油油油油""" # re模塊是python的內置模塊,提供了對于正則表達式的支持 import re # 正則表達式 p = re.compile("油{2,4}") # 在content里面使用正則表達式查找內容,將找到的內容賦值給變量 message = p.findall(content) print(message)6.貪婪模式和非貪婪模式
我們要把下面的字符串中的所有html標簽都提取出來,
source = '<html><head><title>Title</title>'得到這樣的一個列表
['<html>', '<head>', '<title>', '</title>']<.>這樣寫是不對的,因為在python中 . 都是貪婪的,會盡可能多的向后匹配,
為了解決這問題就要使用非貪婪模式 ,只需要加?即可
content = """<html><head><title>Title</title>""" # re模塊是python的內置模塊,提供了對于正則表達式的支持 import re # 正則表達式 p = re.compile("<.*?>") # 在content里面使用正則表達式查找內容,將找到的內容賦值給變量 message = p.findall(content) print(message)對元字符的轉義
反斜杠 \ 在正則表達式中有多種用途。
所謂元字符的轉義,就是讓元字符失去原來的含義
content = """蘋果.是綠色的 橙子.是橙色的 香蕉.是黃色的""" # re模塊是python的內置模塊,提供了對于正則表達式的支持 import re # 正則表達式 p = re.compile(".*\.") # 在content里面使用正則表達式查找內容,將找到的內容賦值給變量 message = p.findall(content) print(message)\d 匹配0-9之間任意一個數字字符,等價于表達式 [0-9]
\D 匹配任意一個不是0-9之間的數字字符,等價于表達式 [^0-9]
\s 匹配任意一個空白字符,包括 空格、tab、換行符等,等價于表達式 [\t\n\r\f\v]
\S 匹配任意一個非空白字符,等價于表達式 [^ \t\n\r\f\v]
\w 匹配任意一個文字字符,包括大小寫字母、數字、下劃線,等價于表達式 [a-zA-Z0-9_]
缺省情況也包括 Unicode文字字符,如果指定 ASCII 碼標記,則只包括ASCII字母
\W 匹配任意一個非文字字符,等價于表達式 [^a-zA-Z0-9_]
方括號-匹配幾個字符之一
方括號表示要匹配 指定的幾個字符之一 。
content = """sadfsafastrhtgyfujh""" # re模塊是python的內置模塊,提供了對于正則表達式的支持 import re # 正則表達式 p = re.compile("[sa]") # 在content里面使用正則表達式查找內容,將找到的內容賦值給變量 message = p.findall(content) print(message)起始、結尾位置 和 單行、多行模式
^ 表示匹配文本的 開頭 位置。
正則表達式可以設定 單行模式 和 多行模式
如果是 單行模式 ,表示匹配 整個文本 的開頭位置。
如果是 多行模式 ,表示匹配 文本每行 的開頭位置。
python中默認是單行模式
content = """001-蘋果價格-60, 002-橙子價格-70, 003-香蕉價格-80,""" # re模塊是python的內置模塊,提供了對于正則表達式的支持 import re # 正則表達式 # 默認是單行模式,如果要找每一行開頭的內容,則需要開啟多行模式re.MULTILINE或者re.M p = re.compile("^\d+-", re.MULTILINE) # 在content里面使用正則表達式查找內容,將找到的內容賦值給變量 message = p.findall(content) print(message)$ 表示匹配文本的 結尾 位置。
如果是 單行模式 ,表示匹配 整個文本 的結尾位置。
如果是 多行模式 ,表示匹配 文本每行 的結尾位置。
content = """001-蘋果價格-60 002-橙子價格-70 003-香蕉價格-80""" # re模塊是python的內置模塊,提供了對于正則表達式的支持 import re # 正則表達式 # 默認是單行模式,如果要找每一行開頭的內容,則需要開啟多行模式re.MULTILINE或者re.M p = re.compile("-\d*$", re.MULTILINE) # 在content里面使用正則表達式查找內容,將找到的內容賦值給變量 message = p.findall(content) print(message)豎線-匹配兩者之一
豎線表示 匹配 前者 或 后者
content = """001-蘋果價格-60 002-橙子價格-70 003-香蕉價格-80""" # re模塊是python的內置模塊,提供了對于正則表達式的支持 import re # 正則表達式 p = re.compile("橙|蕉|7") # 在content里面使用正則表達式查找內容,將找到的內容賦值給變量 message = p.findall(content) print(message)括號-組選擇
括號稱之為 正則表達式的 組選擇。 是從正則表達式 匹配的內容 里面 扣取出 其中的某些部分
content = """蘋果,蘋果是綠色的 橙子,橙子是橙色的 香蕉,香蕉是黃色的""" # re模塊是python的內置模塊,提供了對于正則表達式的支持 import re # 正則表達式 p = re.compile("(.*),") # 在content里面使用正則表達式查找內容,將找到的內容賦值給變量 message = p.findall(content) print(message) content = """張三,手機號碼15945678901 李四,手機號碼13945677701 王二,手機號碼13845666901""" # re模塊是python的內置模塊,提供了對于正則表達式的支持 import re # 正則表達式 p = re.compile("(.*),\D*(\d*)") # 在content里面使用正則表達式查找內容,將找到的內容賦值給變量 message = p.findall(content) print(message)總結
以上是生活随笔為你收集整理的Python基础07的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用scrapy图片管道下载图片
- 下一篇: websocket python爬虫_p