最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python 正則模塊詳情

 更新時(shí)間:2021年11月02日 10:54:27   作者:一碗周  
這篇文章主要介紹了Python 正則模塊,在Python中提供了操作正則表達(dá)式的模塊,即re模塊,文章詳細(xì)記錄了正則表達(dá)式的裝飾符的相關(guān)資料,需要的朋友可以參考一下

Python中提供了操作正則表達(dá)式的模塊,即re模塊。

1、正則表達(dá)式的裝飾符

修飾符 描述 完整名稱(chēng)
re.I 使匹配對(duì)大小寫(xiě)不敏感 re.IGNORECASE
re.A 讓 \w, \W, \b, \B, \d, \D, \s 和 \S 只匹配ASCII,而不是Unicode re.ASCII
re.L 做本地化識(shí)別(locale-aware)匹配 re.LOCALE
re.M 多行匹配,影響 ^ 和 $,多行模式下是支持匹配行開(kāi)頭 re.MULTILINE
re.S 使 . 匹配包括換行在內(nèi)的所有字符 e.DOTALL
re.U 根據(jù)Unicode字符集解析字符。這個(gè)標(biāo)志影響 \w, \W, \b, \B. re.UNICODE
re.X 該標(biāo)志通過(guò)給予你更靈活的格式以便你將正則表達(dá)式寫(xiě)得更易于理解。

2、查找單個(gè)匹配項(xiàng)

2.1 match

re.match 如果 string 開(kāi)始的0或者多個(gè)字符匹配到了正則表達(dá)式樣式,就返回一個(gè)相應(yīng)的匹配對(duì)象 。 如果沒(méi)有匹配,就返回 None ;注意它跟零長(zhǎng)度匹配是不同的。

語(yǔ)法格式:

re.match(pattern, string, flags=0)

  • pattern:匹配的正則表達(dá)式
  • string:要匹配的字符串。
  • flags:標(biāo)志位,用于控制正則表達(dá)式的匹配方式,

如:是否區(qū)分大小寫(xiě),多行匹配等等。

匹配成功re.match方法返回一個(gè)匹配的對(duì)象,否則返回None。

示例代碼:

"""
-*- coding:uft-8 -*-
author: 小甜
time:2020/5/30
"""
import re
string1 = "hello python"
string2 = "hell5o python"
pattern = r"[a-z]+\s\w+"  # a-z出現(xiàn)1次到任意次加一個(gè)\s加任意字符出現(xiàn)1次到任意次
print(re.match(pattern, string1))  # <re.Match object; span=(0, 12), match='hello python'>
print(re.match(pattern, string2))  # None

開(kāi)局導(dǎo)入re模塊,r""表示為一個(gè)正則表達(dá)式

因?yàn)?code>string2中間出現(xiàn)了一個(gè)數(shù)字5 所以不匹配

2.2 group

re.group是從Match對(duì)象中獲取結(jié)果的,不過(guò)不分組默認(rèn)為0,分組索引則從0開(kāi)始(0是完整的一個(gè)匹配),如果多個(gè)分組,則第一個(gè)分組是1;也可以為其命名使用

示例代碼:

"""
-*- coding:uft-8 -*-
author: 小甜
time:2020/5/30
"""
import re
string1 = "hello python"
string2 = "hell5o python"
pattern = r"[a-z]+\s\w+"
pattern1 = r"(\w+)(\s)(\w+)"
pattern2 = r"(?P<first>\w+\s)(?P<last>\w+)"  # 命名分組
print(re.match(pattern, string1))  # <re.Match object; span=(0, 12), match='hello python'>
print(re.match(pattern, string1).group())  # hello python
print(re.match(pattern, string2))  # None
print(re.match(pattern1, string2).group(0))  # hell5o python
print(re.match(pattern1, string2).group(1))  # hell5o
print(re.match(pattern1, string2).group(2))  # 這里匹配的是那個(gè)空格
print(re.match(pattern1, string2).group(3))  # python
print(re.match(pattern2, string2).group("last"))  # python

2.3 search

re.search 掃描整個(gè)字符串找到匹配樣式的第一個(gè)位置,并返回一個(gè)相應(yīng)的匹配對(duì)象 。如果沒(méi)有匹配,就返回一個(gè) None ; 注意這和找到一個(gè)零長(zhǎng)度匹配是不同的。語(yǔ)法結(jié)構(gòu)和match是一樣的

示例代碼:

"""
-*- coding:uft-8 -*-
author: 小甜
time:2020/5/30
"""
import re
string = "Hi World Hello python"
pattern = r"Hello python"
print(re.search(pattern, string).group())  # Hello python
print(re.match(pattern, string))  # None

兩者的區(qū)別:

re.match只匹配字符串的開(kāi)始,如果字符串開(kāi)始不符合正則表達(dá)式,則匹配失敗,函數(shù)返回 None,而 re.search匹配整個(gè)字符串,直到找到一個(gè)匹配。

2.4 fullmatch

re.fullmatch如果整個(gè) string 匹配這個(gè)正則表達(dá)式,就返回一個(gè)相應(yīng)的匹配對(duì)象 。 否則就返回 None ; 注意跟零長(zhǎng)度匹配是不同的。

語(yǔ)法格式跟上面的也是一樣的

示例代碼:

"""
-*- coding:uft-8 -*-
author: 小甜
time:2020/5/30
"""
import re
string = "Hi World Hello python"
pattern = r"Hi World Hello python"
pattern1 = r"hi World hello python"

print(re.fullmatch(pattern, string))  # <re.Match object; span=(0, 21), match='Hi World Hello python'>
print(re.fullmatch(pattern1, string))  # None

三者的區(qū)別:

  • match:字符串開(kāi)頭匹配
  • search:查找任意位置的匹配項(xiàng)
  • fullmatch:整個(gè)字符串要與正則表達(dá)式完全匹配

2.5 匹配對(duì)象

匹配對(duì)象總是有一個(gè)布爾值 True。如果沒(méi)有匹配的話match()search() 返回 None 所以可以簡(jiǎn)單的用 if 語(yǔ)句來(lái)判斷是否匹配

示例代碼:

import re
string = "Hi World Hello python"
pattern = r"Hello python"
match1 = re.search(pattern, string)
match2 = re.match(pattern, string)
if match1:
    print(match1.group())  # Hello python

if match2:  # 因?yàn)閙atch2的值為none所以不執(zhí)行
    print(match2.group())

3、查找多個(gè)匹配項(xiàng)

3.1 compile

re.compile將正則表達(dá)式的樣式編譯為一個(gè)正則對(duì)象,可以用于匹配

語(yǔ)法結(jié)構(gòu):

re.compile(pattern, flags=0)

  • pattern: 匹配的正則表達(dá)式
  • flags: 標(biāo)志位,用于控制正則表達(dá)式的匹配方式,如:是否區(qū)分大小寫(xiě),多行匹配等等。

3.2 findall

re.findall在字符串中找到正則表達(dá)式所匹配的所有子串,并返回一個(gè)列表,如果沒(méi)有找到匹配的,則返回空列表。與match search 不同的是 match search 是匹配一次 findall 匹配所有。

語(yǔ)法結(jié)構(gòu):

re.findall(string[, pos[, endpos]])

  • string:待匹配的字符串。
  • pos:可選參數(shù),指定字符串的起始位置,默認(rèn)為 0。
  • endpos:可選參數(shù),指定字符串的結(jié)束位置,默認(rèn)為字符串的長(zhǎng)度

3.3 finditer

pattern string 里所有的非重復(fù)匹配,返回為一個(gè)迭代器保存了匹配對(duì)象 。 *string*從左到右掃描,匹配按順序排列??掌ヅ湟舶诮Y(jié)果里。

語(yǔ)法結(jié)構(gòu)同match

示例代碼:

import re
from collections.abc import Iterator  # 導(dǎo)入判斷是否為迭代器的對(duì)象
string = "hello python hi javascript"
pattern = r"\b\w+\b"
pattern_object = re.compile(r"\b\w+\b")
print(type(pattern_object))  # <class 're.Pattern'>

findall = pattern_object.findall(string)
for i in findall:
    print(i)

finditer = re.finditer(pattern, string)
# 判斷是否為迭代器
print(isinstance(finditer, Iterator))  # True
for _ in range(4):
    finditer1 = finditer.__next__()  # 取出下一個(gè)值
    print(finditer1.group())
'''
--循環(huán)結(jié)果--
hello
python
hi
javascript
'''

如果有超大量的匹配項(xiàng)的話,返回finditer的性能要優(yōu)于findall,這就是列表和迭代器的區(qū)別。

4、分割split

re.split方法按照能夠匹配的子串將字符串分割后返回列表

語(yǔ)法結(jié)構(gòu):

re.split(pattern, string[, maxsplit=0, flags=0])

  • pattern:匹配的正則表達(dá)式
  • string:分隔符。
  • maxsplit:分隔次數(shù),maxsplit=1分隔一次,默認(rèn)為 0,不限制次數(shù)。
  • flags:標(biāo)志位,用于控制正則表達(dá)式的匹配方式,如:是否區(qū)分大小寫(xiě),多行匹配等等。

示例代碼:

import re
string = '''hello hi    good morning
goodnight
python
javascript
Linux
'''
pattern = r'\s+'  # 以空格回車(chē)制表符為回車(chē)符
print(re.split(pattern, string))  # 不限制次數(shù)分隔
# ['hello', 'hi', 'good', 'morning', 'goodnight', 'python', 'javascript', 'Linux', '']
print(re.split(pattern, string, 5))  # 分隔5次
# ['hello', 'hi', 'good', 'morning', 'goodnight', 'python\njavascript\nLinux\n']

str模塊的split不同的是,re模塊的split支持正則

4.1 替換

4.1.1 sub

re.sub用于替換字符串中的匹配項(xiàng)

語(yǔ)法結(jié)構(gòu):

re.sub(pattern, repl, string, count=0, flags=0)

  • pattern : 正則中的模式字符串。
  • repl : 替換的字符串,也可為一個(gè)函數(shù)。
  • string : 要被查找替換的原始字符串。
  • count : 模式匹配后替換的最大次數(shù),默認(rèn) 0 表示替換所有的匹配。
  • flags : 編譯時(shí)用的匹配模式,數(shù)字形式。

到這里就可以完成一個(gè)某手的評(píng)論區(qū),修改不良評(píng)論的小案例

import re
string = input("請(qǐng)輸入評(píng)論:")
pattern = r"[美麗可愛(ài)大方]{1}"  # 檢測(cè)的字符
print(re.sub(pattern, "萌", string))

效果圖:

4.1.2 subn

行為與 sub() 相同,但是返回一個(gè)元組 (字符串, 替換次數(shù)).

4.2 escape

re.escape(pattern)轉(zhuǎn)義 pattern 中的特殊字符。例如正則里面的元字符.

示例代碼:

import re
pattern = r'\w\s*\d\d.'
# 打印pattern的特殊字符
print(re.escape(pattern))  # \w\s*\d\d.

任意可能包含正則表達(dá)式元字符的文本字符串進(jìn)行匹配,它就是有用的,不過(guò)容易出現(xiàn)錯(cuò)誤,手動(dòng)轉(zhuǎn)義比較好

4.3 purge

re.purge()清除正則表達(dá)式的緩存。

到此這篇關(guān)于Python 正則模塊詳情的文章就介紹到這了,更多相關(guān)Python 正則模塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python中json格式數(shù)據(jù)輸出的簡(jiǎn)單實(shí)現(xiàn)方法

    python中json格式數(shù)據(jù)輸出的簡(jiǎn)單實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇python中json格式數(shù)據(jù)輸出的簡(jiǎn)單實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-10-10
  • python requests 庫(kù)請(qǐng)求帶有文件參數(shù)的接口實(shí)例

    python requests 庫(kù)請(qǐng)求帶有文件參數(shù)的接口實(shí)例

    今天小編就為大家分享一篇python requests 庫(kù)請(qǐng)求帶有文件參數(shù)的接口實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Python獲取圖片像素BGR值并生成純色圖

    Python獲取圖片像素BGR值并生成純色圖

    這篇文章主要介紹了利用Python獲取圖片像素BGR值,并將其生成純色圖。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-01-01
  • 基于Flask實(shí)現(xiàn)文件上傳七牛云中并下載

    基于Flask實(shí)現(xiàn)文件上傳七牛云中并下載

    文件上傳是Web應(yīng)用中常見(jiàn)的功能之一,而七牛云則提供了強(qiáng)大的云存儲(chǔ)服務(wù),本文我們將學(xué)習(xí)如何在Flask應(yīng)用中實(shí)現(xiàn)文件上傳,并將上傳的文件保存到七牛云,感興趣的可以學(xué)習(xí)一下
    2023-10-10
  • Python之time模塊的時(shí)間戳,時(shí)間字符串格式化與轉(zhuǎn)換方法(13位時(shí)間戳)

    Python之time模塊的時(shí)間戳,時(shí)間字符串格式化與轉(zhuǎn)換方法(13位時(shí)間戳)

    今天小編就為大家分享一篇Python之time模塊的時(shí)間戳,時(shí)間字符串格式化與轉(zhuǎn)換方法(13位時(shí)間戳),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-08-08
  • python文件頭部聲明#coding=utf-8問(wèn)題

    python文件頭部聲明#coding=utf-8問(wèn)題

    這篇文章主要介紹了python文件頭部聲明#coding=utf-8問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • python?spotlight庫(kù)簡(jiǎn)化交互式方法探索數(shù)據(jù)分析

    python?spotlight庫(kù)簡(jiǎn)化交互式方法探索數(shù)據(jù)分析

    這篇文章主要為大家介紹了python?spotlight庫(kù)簡(jiǎn)化的交互式方法探索數(shù)據(jù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • 淺談numpy數(shù)組初始化的幾種方法

    淺談numpy數(shù)組初始化的幾種方法

    本文主要介紹了淺談numpy數(shù)組初始化的幾種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 詳解Python在七牛云平臺(tái)的應(yīng)用(一)

    詳解Python在七牛云平臺(tái)的應(yīng)用(一)

    這篇文章主要介紹了詳解Python在七牛云平臺(tái)的應(yīng)用(一),涉及Python通過(guò)官方庫(kù)對(duì)空間的操作,上傳的步驟,操作方法等相關(guān)內(nèi)容,以及完整的操作代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Python如何發(fā)送Syslog日志

    Python如何發(fā)送Syslog日志

    這篇文章主要介紹了Python如何發(fā)送Syslog日志問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09

最新評(píng)論

绥阳县| 大埔县| 开封县| 墨玉县| 宽甸| 定襄县| 乡宁县| 太原市| 汉沽区| 正宁县| 林芝县| 柳州市| 孙吴县| 东乌| 隆子县| 武冈市| 嘉义县| 内黄县| 屯门区| 遂宁市| 伊金霍洛旗| 珲春市| 大宁县| 荥经县| 黔东| 孟津县| 上思县| 蓝田县| 内黄县| 英德市| 富平县| 富蕴县| 嵊州市| 防城港市| 河西区| 正蓝旗| 林甸县| 横峰县| 佛冈县| 汝南县| 安徽省|