python 正規表示式

2022-04-01 09:17:50 字數 2742 閱讀 5070

#! /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模組的講解很簡單易懂,內容不多但起碼把人領進門了,...