欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在Python中使用正則表達(dá)式的一些基本語(yǔ)法演示

jf_ZqFkd6Up ? 來(lái)源:Linux迷 ? 2023-04-15 16:32 ? 次閱讀

每當(dāng)你遇到文本處理問(wèn)題時(shí),正則表達(dá)式(regex)總是你的好朋友。 然而,要記住所有復(fù)雜的規(guī)則是很難的甚至是不可能的。甚至僅僅閱讀語(yǔ)法也是令人不知所措的。

因此,學(xué)習(xí)正則表達(dá)式的最佳方法是通過(guò)學(xué)習(xí)實(shí)際示例。 本文將總結(jié)日常編程場(chǎng)景中常用的 9 個(gè)正則表達(dá)式技巧。閱讀完后,正則表達(dá)式對(duì)你來(lái)說(shuō)就像喝杯茶一樣簡(jiǎn)單。

驗(yàn)證電子郵件地址

檢查電子郵件地址的有效性是正則表達(dá)式的經(jīng)典用例。 下面是一個(gè)示例程序:


import re
def val_email(email):
    pattern = r"^[a-zA-Z0-9]+@[a-zA-Z0-9]+.[a-zA-Z]{2,}$"
    if re.match(pattern, email):
        print("合法的郵件地址:)")
    else:
        print("無(wú)效的郵件地址!!")


val_email(email="[email protected]")
# 合法的郵件地址:)
val_email(email="elonexample.com")
# 無(wú)效的郵件地址!!
val_email(email="[email protected]")
# 無(wú)效的郵件地址!!
在這個(gè)例子中,我們使用 Python 中的 re 模塊來(lái)編譯一個(gè)匹配有效電子郵件格式的正則表達(dá)式模式。然后,我們使用它的 match() 函數(shù)來(lái)檢查 email 變量是否與模式匹配。 在模式中,有幾個(gè)關(guān)鍵點(diǎn):

我們使用 [] 表示一個(gè)范圍。例如,[a-zA-Z0-9] 可以匹配 0 到 9 之間的數(shù)字、A 到 Z 之間的字母或 a 到 z 之間的字母。

^ 表示行的開(kāi)頭。在我們的例子中,我們使用它來(lái)確保文本必須以 [a-zA-Z0-9] 開(kāi)始。

$ 表示行的結(jié)尾。

用于轉(zhuǎn)義特殊字符(允許我們匹配像 '.' 這樣的字符)。

{n,m} 語(yǔ)法是用來(lái)匹配 n-m 個(gè)先前的正則表達(dá)式。我們使用了 {2,},這意味著前面的部分 [a-zA-Z] 應(yīng)該至少重復(fù) 2 次。這就是為什么 "[email protected]" 被識(shí)別為無(wú)效的電子郵件地址。

表示匹配前面的正則表達(dá)式至少 1 次。例如,ab+ 將匹配 a 后面的任何非零數(shù)量的 b。

這個(gè)經(jīng)典的例子演示了在 Python 中使用正則表達(dá)式的一些基本語(yǔ)法。 實(shí)際上,Python 的 re 模塊是一個(gè)隱藏的寶藏,我們可以從中使用許多更多的技巧。

從字符串中提取數(shù)字

要從長(zhǎng)文本中找到一些特殊字符,最直接的想法是使用 for 循環(huán)遍歷所有字符并找到所需的內(nèi)容。 但是,沒(méi)有必要使用任何循環(huán)。正則表達(dá)式就是為了作為過(guò)濾器而生的。



import re


def extract_numbers(text):
    pattern = r"d+"
    return re.findall(pattern, text)


print(extract_numbers("Linux迷的文章閱讀量超過(guò)100000000。"))
# ['100000000']

pYYBAGQ6YV-AH4wvAAEUQCCbD50996.jpg

如上所示,re.findall() 函數(shù)接收一個(gè)正則表達(dá)式和一個(gè)文本,可以方便地幫助我們找到所有我們需要的字符。 其中 d 用于在正則表達(dá)式中匹配數(shù)字。 接下來(lái)我們看一個(gè)具體例子,演示 d 的用途。

驗(yàn)證電話號(hào)碼

下面的例子利用了 d 的用法來(lái)驗(yàn)證有效的電話號(hào)碼:


import re


def is_valid_phone_number(phone_number):
    pattern = r"^d{3}-d{3}-d{4}$"
    return bool(re.match(pattern, phone_number))


print(is_valid_phone_number("123-456-7890"))  # True
print(is_valid_phone_number("1234567890"))  # False
除了 d 外,我們還使用了 ^、$ 和 {n} 語(yǔ)法來(lái)確保字符串是一個(gè)有效的電話號(hào)碼。

將文本分割成單詞

將長(zhǎng)文本分割成單獨(dú)的單詞是日常編程中的另一個(gè)常見(jiàn)需求。借助 re 模塊的 split() 函數(shù),我們可以輕松完成此任務(wù):


>>> re.split(r's+', 'a b   c')
# ['a', 'b', 'c']


>>> re.split(r'[s,]+', 'a,b, c  d')
# ['a', 'b', 'c', 'd']


>>> re.split(r'[s,;]+', 'a,b;; c  d')
['a', 'b', 'c', 'd']
如上述代碼所示,我們使用 s 來(lái)在正則表達(dá)式中匹配一個(gè)空格。

使用正則表達(dá)式查找和替換文本

在使用正則表達(dá)式從文本中找到特定字符后,我們可能需要用新的字符串來(lái)替換它們。 re 模塊的 sub() 函數(shù)可以使這個(gè)過(guò)程變得非常順暢:


import re


text = "linuxmi is an full-stack software engineer."
pattern = r"[a-e]"
replacement = "*"


new_text = re.sub(pattern, replacement, text)
print(new_text)  
#linuxmi is *n full-st**k softw*r* *ngin**r.
poYBAGQ6YX6AVoA9AAEqbakAopQ682.jpg

如上所示,我們只需要將三個(gè)參數(shù)傳遞給sub()函數(shù):模式、替換字符串和原始文本。它將在執(zhí)行后返回新文本。

在Python中預(yù)編譯正則表達(dá)式

在Python中使用正則表達(dá)式匹配字符串時(shí),有兩個(gè)步驟: 編譯正則表達(dá)式。使用編譯后的正則表達(dá)式匹配字符串。因此,如果一個(gè)正則表達(dá)式被重復(fù)使用,每次編譯都會(huì)浪費(fèi)時(shí)間。 為了避免這種情況,Python允許我們預(yù)先編譯一個(gè)正則表達(dá)式,然后重復(fù)使用編譯后的對(duì)象進(jìn)行后續(xù)匹配。這可以顯著提高性能和效率。


import re
re_numbers = re.compile(r'^d+$')
print(re_numbers.match('123'))
# 
print(re_numbers.match('linuxmi'))
# None
上面的例子展示了如何使用re模塊中的compile()函數(shù)預(yù)編譯正則表達(dá)式并稍后使用它。只要字符串無(wú)法匹配正則表達(dá)式,match()函數(shù)就會(huì)返回None。

提取和操作文本的子內(nèi)容

group()方法是Python re模塊中的一個(gè)函數(shù),它返回一個(gè)或多個(gè)匹配的正則表達(dá)式匹配對(duì)象的子組。它非常方便,用于提取文本的不同部分。 例如,以下代碼展示了如何從“HH:MM”格式的時(shí)間字符串中提取兩個(gè)部分:


import re


time='21:37'


matched = re.match(r'^(0[0-9]|1[0-9]|2[0-3]):(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9])$', time)


print(matched.groups())
# ('21', '37')
print(matched.group())
# '21:37' 
print(matched.group(0)) 
# '21:37'
print(matched.group(1))
# '21'
print(matched.group(2))
# '37'
pYYBAGQ6YZaANCreAAEP03FuiLg171.jpg

如上所示,group(0) 返回原始字符串。然后,group(1) 和 group(2) 分別返回匹配字符串的第一部分和第二部分。

用于提取子內(nèi)容的命名分組

如果子組數(shù)量變得很多,由于太多的神奇數(shù)字,程序?qū)⒑茈y閱讀。 因此,Python 提供了用于子內(nèi)容提取的命名組技巧:我們可以使用命名組捕獲匹配字符串的特定部分,而不是使用編號(hào)的捕獲組。這可以使我們的代碼更易于閱讀和維護(hù)。 以下是一個(gè)例子:



import re


text = "linuxmi, age 27"
pattern = r"(?Pw+),sages(?Pd+)"


match = re.search(pattern, text)


print(match.group("name"))  
# linuxmi
print(match.group("age"))   
# 27

poYBAGQ6YauAOvE2AADP1qMuLjw462.jpg

如上所示,命名分組的關(guān)鍵語(yǔ)法是 ?P。它定義了對(duì)應(yīng)組的名稱,我們可以使用 group() 函數(shù)根據(jù)名稱提取內(nèi)容。

使用VERBOSE標(biāo)志使正則表達(dá)式易讀

在一些復(fù)雜的情況下,正則表達(dá)式可能會(huì)變得越來(lái)越復(fù)雜和難以讀取。我們肯定需要一種方法來(lái)使其更整潔和干凈。 這就是re.VERBOSE技巧。


import re


text = "linuxmi, [email protected], 666-666-6666"
pattern = r"""
    (?Pw+),s
    (?Pw+@w+.w+),s
    (?Pd{3}-d{3}-d{4})
"""


match = re.search(pattern, text, re.VERBOSE)
if match:
    print(match.group("name"))
    print(match.group("email"))
    print(match.group("phone"))
# linuxmi
# [email protected]
# 666-666-6666
如上所示,我們可以將復(fù)雜的正則表達(dá)式分成多行,以提高可讀性。只要在re.search()函數(shù)中加入re.VERBOSE標(biāo)志,它就可以像平常一樣被正確識(shí)別。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    585

    瀏覽量

    20613
  • 過(guò)濾器
    +關(guān)注

    關(guān)注

    1

    文章

    433

    瀏覽量

    19762
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4811

    瀏覽量

    85080

原文標(biāo)題:Python 中使用正則表達(dá)式的正確姿勢(shì)

文章出處:【微信號(hào):Linux迷,微信公眾號(hào):Linux迷】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    什么是正則表達(dá)式?正則表達(dá)式如何工作?哪些語(yǔ)法規(guī)則適用正則表達(dá)式?

    正則表達(dá)式又稱規(guī)則表達(dá)式(Regular Expression,代碼中常簡(jiǎn)寫(xiě)為 regex、regexp 或 RE),是種用于匹配、查找、替換文本的強(qiáng)大工具。它能夠以特定的模式匹配
    的頭像 發(fā)表于 11-03 14:41 ?4060次閱讀
    什么是<b class='flag-5'>正則表達(dá)式</b>?<b class='flag-5'>正則表達(dá)式</b>如何工作?哪些<b class='flag-5'>語(yǔ)法</b>規(guī)則適用<b class='flag-5'>正則表達(dá)式</b>?

    shell正則表達(dá)式學(xué)習(xí)

    正則表達(dá)式計(jì)算機(jī)科學(xué)中,是指個(gè)用來(lái)描述或者匹配系列符合某個(gè)句法規(guī)則的字符串的單個(gè)字符串。很多文本編輯器或其他工具里,
    發(fā)表于 07-25 17:18

    總結(jié)linux腳本語(yǔ)法正則表達(dá)式的應(yīng)用

    每日學(xué)點(diǎn)之linux腳本語(yǔ)法以及正則表達(dá)式基礎(chǔ)
    發(fā)表于 11-08 09:23

    正則表達(dá)式Vivado約束文件中的應(yīng)用

    文件中匹配目標(biāo)的時(shí)候,可行的情況下更傾向于使用正則表達(dá)式。本文就介紹下我常使用的正則表達(dá)式一些
    發(fā)表于 01-26 07:03

    初識(shí) Python 正則表達(dá)式

    正則表達(dá)式個(gè)特殊的字符序列,用于判斷個(gè)字符串是否與我們所設(shè)定的字符序列是否匹配,也就是說(shuō)檢查個(gè)字符串是否與某種模式匹配。Python
    發(fā)表于 03-17 16:44

    快速入門IPv6和正則表達(dá)式

    對(duì)于日常開(kāi)發(fā)中只接觸IPv4,并沒(méi)有深入研究過(guò)正則表達(dá)式的開(kāi)發(fā)者,面對(duì)IPv6和正則表達(dá)式,容易產(chǎn)生畏懼心理,覺(jué)得是兩座難以翻越的大山。本文通過(guò)一些表格整理對(duì)IPv6的表示方法,以及正則表達(dá)式
    的頭像 發(fā)表于 03-30 09:31 ?9081次閱讀
    快速入門IPv6和<b class='flag-5'>正則表達(dá)式</b>

    Python正則表達(dá)式教程之標(biāo)準(zhǔn)庫(kù)的完整介紹及使用示例說(shuō)明

    本文介紹了Python對(duì)于正則表達(dá)式的支持,包括正則表達(dá)式基礎(chǔ)以及Python正則表達(dá)式標(biāo)準(zhǔn)庫(kù)的完整介紹及使用示例。本文的內(nèi)容不包括如何編寫(xiě)
    發(fā)表于 01-23 16:00 ?3次下載
    <b class='flag-5'>Python</b><b class='flag-5'>正則表達(dá)式</b>教程之標(biāo)準(zhǔn)庫(kù)的完整介紹及使用示例說(shuō)明

    Python正則表達(dá)式的學(xué)習(xí)指南

    本文介紹了Python對(duì)于正則表達(dá)式的支持,包括正則表達(dá)式基礎(chǔ)以及Python正則表達(dá)式標(biāo)準(zhǔn)庫(kù)的完整介紹及使用示例。本文的內(nèi)容不包括如何編寫(xiě)
    發(fā)表于 09-15 08:00 ?0次下載
    <b class='flag-5'>Python</b><b class='flag-5'>正則表達(dá)式</b>的學(xué)習(xí)指南

    Python正則表達(dá)式指南

    本文介紹了Python對(duì)于正則表達(dá)式的支持,包括正則表達(dá)式基礎(chǔ)以及Python正則表達(dá)式標(biāo)準(zhǔn)庫(kù)的完整介紹及使用示例。本文的內(nèi)容不包括如何編寫(xiě)
    發(fā)表于 03-26 09:13 ?10次下載
    <b class='flag-5'>Python</b><b class='flag-5'>正則表達(dá)式</b>指南

    初識(shí) Python 正則表達(dá)式

    正則表達(dá)式個(gè)特殊的字符序列,用于判斷個(gè)字符串是否與我們所設(shè)定的字符序列是否匹配,也就是說(shuō)檢查個(gè)字符串是否與某種模式匹配。 Python
    的頭像 發(fā)表于 03-17 16:44 ?1474次閱讀

    python正則表達(dá)式中的常用函數(shù)

    編譯正則表達(dá)式模式,返回個(gè)正則對(duì)象的模式。(可以把那些常用的正則表達(dá)式編譯成正則表達(dá)式對(duì)象,這樣可以提高
    的頭像 發(fā)表于 03-18 16:12 ?1850次閱讀

    Linux入門之正則表達(dá)式

    一些約定好的匹配規(guī)則,但由于規(guī)則較多,可能比較容易忘記。 本文會(huì)先整理出所有的正則表達(dá)式以及其含義,接下來(lái)會(huì)利用grep命令,詳細(xì)介紹每種正則表達(dá)式的使用方式,并給出案例。
    的頭像 發(fā)表于 05-12 15:31 ?946次閱讀
    Linux入門之<b class='flag-5'>正則表達(dá)式</b>

    OpenHarmony中使正則表達(dá)式

    本文主要介紹筆者在做開(kāi)源鴻蒙應(yīng)用開(kāi)發(fā)時(shí),ArkTs 中使正則表達(dá)式處理像 string 等字符串對(duì)象。
    的頭像 發(fā)表于 06-06 09:24 ?1549次閱讀

    Python中的正則表達(dá)式

    類字符串的特征,這樣我們就可以快速、高效地處理大量的文本數(shù)據(jù)。 基礎(chǔ)語(yǔ)法 Python中,使用re模塊來(lái)操作正則表達(dá)式。re模塊提供了很多函數(shù),用于對(duì)字符串進(jìn)行
    的頭像 發(fā)表于 06-21 16:52 ?1042次閱讀

    linux正則表達(dá)式匹配字符串

    Linux操作系統(tǒng)中,正則表達(dá)式種強(qiáng)大的模式匹配工具,它可以用于文本中查找、替換和篩選特定的字符串。準(zhǔn)確掌握正則表達(dá)式
    的頭像 發(fā)表于 11-23 10:26 ?791次閱讀