#! /usr/bin/env python# -*- coding:utf-8 -*-
import re
# 正規表示式:re模組
# 1.普通字元:大多數字元和字母都會跟自身匹配
# re.fiandall() 返回乙個列表
#2.元字元:
# . 萬用字元 乙個只能匹配乙個結果
# ^ 以xx開頭的匹配
# $ 以xx為結尾的
# * 重複 匹配0到多次
# + 重複 匹配1到多次
# ? 匹配0到1次
# 匹配前乙個元字元m到n次
# \\ 轉義字元 其後字元失去特殊元字元含義
# 字符集 可匹配任意乙個字元
# | 或 邏輯表示式
# \d = [0-9] 匹配乙個數字
# \d = [^0-9] 匹配非數字
# \s 匹配任意空白字元
# \s 匹配非空白字元
# \w =[a-za-z_] 匹配數字、字母、下劃線中任意乙個字元
# \w 匹配非數字、字母、下劃線中的任意字元
#3.模式
# i 忽略大小寫模式
# l 字符集本地化
# m 多行模式
# s 此模式下.可匹配包括換行符在內的任意字元
# x 冗餘模式 忽略表示式中的空白和注釋
# findall(pattern, string, flags=0)
str = "woshizhongguoren"
regex0 = re.findall("guo",str)
regex1 = re.findall("guo",str,re.i)
print(regex0)
print(regex1)
str1 = '''where are you
i an here
oh i see'''
index0 = re.findall("^\w+",str1)
index1 = re.findall("^\w+",str1,re.m)
print(index0)
print(index1)
#4.函式
#郵箱正規表示式
#compile(pattern, flags=0) 使用 compile 函式預編譯出乙個正則模式之後再去使用,這樣在後面的**中可以很方便的復用它
#編譯其實是很費時的,這樣可以提公升效率
str2 = "23223whh./#[email protected]"
emailregex = re.compile("[0-9a-za-z_]@[0-9a-za-z]\.[com,cn,net]")
index2 = emailregex.findall(str2)
print(index2)#['[email protected]']
#match(pattern, string, flags=0)
# 使用指定正則去待操作字串中尋找可以匹配的子串, 返回匹配上的第乙個字串,並且不再繼續找
#從字串開始處開始查詢的,如果開始處不匹配,則不再繼續尋找,找不到時返回 none
#web框架大量使用
index3 = emailregex.match(str2)
print(index3)#none
#search(pattern, string, flags=0)
#不限制正規表示式的開始匹配位置,匹配找到的第乙個字串
index4 = emailregex.search(str2)
print(index4)#<_sre.sre_match object; span=(12, 27), match='[email protected]'>
#split(pattern, string, maxsplit=0, flags=0)
#maxsplit 指定切分次數
#函式使用給定正規表示式尋找切分字串位置,返回包含切分後子串的列表
# 如果匹配不到,則返回包含原字串的乙個列表
index5 =emailregex.split(str2)
print(index5)#['23223whh./#$', 'rtdfd']
#sub(pattern, repl, string, count=0, flags=0)
#將正規表示式 pattern 匹配到的字串替換為 repl 指定的字串
#引數 count 用於指定最大替換次數
index6 = emailregex.sub('world',str2)
print(index6)#23223whh./#$worldrtdfd
#5.組(組與match物件是python正則式的重點)
#分組的目的:從匹配到的結果中再次提取想要的部分結果
#(?p...) 分組的命名模式,取此分組中的內容時可以使用索引也可以使用name
#(?p=name) 分組的引用模式,可在同乙個正規表示式用引用前面命名過的正則
str3 = "tom 19 05317652"
p=re.compile(r'(?p[a-z]+)\s+(?p\d+)\s+(?p\d+).*', re.i)
p.groupindex
index7 = p.match(str3)
print(index7)
print(index7.group())
print(index7.group('age'))
python正規表示式元字元 正規表示式
字元 描述將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了 regexp 物件的 multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束...
Python 正規表示式
1.在python中,所有和正規表示式相關的功能都包含在re模組中。2.字元 表示 字串的末尾 如 road 則表示 只有當 road 出現在乙個字串的尾部時才會匹配。3.字元 表示 字元中的開始 如 road 則表示 只有當 road 出現在乙個字串的頭部時才會匹配。4.利用re.sub函式對字串...
Python正規表示式
學習python自然而然就不得不面對正規表示式這個難題。當初在沒有學習python之前,自己也曾經嘗試著學習過正規表示式,但是那時候感覺很麻煩,很難懂,結果就是不了了之。但是現在學習python我用的書是 python基礎教程 第二版 這本書中對re模組的講解很簡單易懂,內容不多但起碼把人領進門了,...