Python學習第137課——正則表達式中實現可選規則

2021-01-09 石問新

【每天幾分鐘,從零入門python編程的世界!】

正則表達式英文是Regular Expression,各種程式語言中都是把它簡寫成Regex,或者Regexp或者re。

這節我們學習如何在正則表達式中實現可選規則。

●用小括號和pipe(豎線|)實現每一個可選項

例1:

現在假設我們有一個應答機器人,接到了很多很多用戶的留言,這些留言中包括用戶自己的姓名、聯繫電話等信息。我們把這些留言都匯集在一起,這些留言信息就相當於一個很長很長的字符串。現在假如說我們在包含海量姓名的這個字符串中尋找特定的姓名,我們如何實現呢?

我們通過代碼來說明:

上面的代碼說明:

我們在message這個字符串中尋找特定的姓名,

r'Jack( Ma| Chen| Zhou| Liu)'這個正則表達式的模式,表示要找的字符串是:「以Jack開頭,後面跟一個空格,空格後面是Ma、Chen、Zhou、Liu這四個中的任意一個」的這種格式的字符串。也就是說,從message中找的字符串就是跟Jack Ma、Jack Chen、Jack Zhou、Jack Liu這四個中任意一個匹配的字符串。

在這裡,可選的規則用小括號括起來,( Ma| Chen| Zhou| Liu)就是表示可選的規則,括號裡面,豎線之前的字符串就表示每一個可選項。

我們把r'Jack( Ma| Chen| Zhou| Liu)'叫做正則表達式的規則文本,我們知道正則表達式是用來尋找字符串的模式或者規則,那麼r'Jack( Ma| Chen| Zhou| Liu)'就是這個規則或者說模式的具體表達形式。如果是第一次接觸編程或者正則表達式的小夥伴,有沒有覺得有點繞?多理解下正則表達式的概念就清楚了。

上面代碼運行結果:

message這個字符串中還有Jack Chen、Jack Zhou、Jack Liu這幾個字符串都是匹配正則表達式的,為什麼結果列印出來,只有一個Jack Ma?

因為search()函數是找到並返回符合條件的第一個字符串,所以只返回了Jack Ma。

以上代碼最後一句,我們為什麼列印的是mo.group(),而不是mo?

因為search()函數,還有match()函數,返回的都是一個匹配正則表達式的對象,我們mo列印一下,就能看到它是一個對象,如下:

運行結果:

我們看到mo列印出來是一個對象。

所以mo.group()返回的才是匹配正則表達式的字符串,這一點要知道。

●用括號和問號實現可選規則

例2:假如有一個人名叫Monkey D Lufy,實際上現實中,老外的名字寫出來,一般都是只寫firstname和lastname,middlename一般是不寫的,只有非常親近的人,才能知道他的middlename,那麼這個D就是Monkey D Lufy這個人的middlename。

現在假如說我們是海軍,從各種渠道收集到了海賊王路飛這個人給別人留言或者留名的信息,這個信息以字符串的形式保存在message變量中。假如說我們也不知道這個message字符串中,路飛的名字中帶不帶D這個middlename。反正我們不管他的名字中有沒有D,只要有Monkey Lufy這兩個名,我們就確定是路飛本人。我們現在要用正則表達式來表示這個規則,也就是說,我們從message中找到的字符串,不管是Monkey Lufy,還是Monkey D Lufy,都是符合規則的。那麼這個正則表達式的規則如何寫呢?

代碼如下:

運行結果:

代碼說明:

在正則表達式的模式文本r'Monkey (D )?lufy'中,(D )?就表示D後面帶一個空格是可選的。

問號?表示0個或1個,即可以有也可以沒有。

所以r'Monkey (D )?lufy',就表示Monkey後面可以有1個D加空格,然後再跟Lufy,或者Monkey後面可以是0個D加空格,再跟Lufy。

在這裡,把規則中可選的部分用小括號括起來,然後後面跟一個問號,就表示這一部分是可選的、可以有也可以沒有。

從上面代碼的message中的Monkey D Lufy,也是符合我們寫的正則表達式規則的,所以被我們找到了然後列印了出來。

我是時問新,歡迎關注我。跟我一起從零開始學習Python,每天花一點時間,開啟python編程新世界的大門,領略新的風光,讓人生多一種可能!

相關焦點

  • Python中使用re模塊實現正則表達式的匹配字符串操作
    ,關注我,一同學習簡單易懂的Python編程。第八十二節:匹配字符串經過上一節比較枯燥的基礎內容,今天來看看如何利用正則表達式在Python中進行具體操作。在Python中使用正則表達式,首先要導入一個re模塊。
  • python正則表達式使用方法說明
    曾光紅/文 (同步發布豆瓜網)一、導入re庫python使用正則表達式要導入re庫。import re在re庫中。正則表達式通常被用來檢索查找、替換那些符合某個模式(規則)的文本。三、正則表達式中常見的基本符號1.點號「.」一個點號可以代替除了換行符(\n)以外的任何一個字符,包括但不限於英文字母、數字、漢字、英文標點符號和中文標點符號。
  • Python中使用re模塊實現正則表達式的替換字符串操作
    ,關注我,一同學習簡單易懂的Python編程。>和昨天學過的三種匹配字符串的方法一樣,模塊名re使用一個點「.」和方法名sub連接;方法名sub後的小括號可以設置五個參數,前三個必備,後兩個可選,中間使用逗號「,」分隔;第一個參數是老熟人pattern,代表正則表達式轉換的模式字符串;
  • Python中使用re模塊實現正則表達式的分割字符串操作
    ,關注我,一同學習簡單易懂的Python編程。第八十四節:正則表達式實現分割字符串操作分割字符串的方法在前面就學習過,用正則表達式實現分割字符串,使用的依然是split()方法,分割後也是返回一個列表,不同點在哪裡呢?
  • Python正則表達式:特殊符號和字符
    正表達式為高級的文本模式匹配,抽取,與/或文本形式的搜索和替換功能提供了基礎。簡而言之,正則表達式(簡稱regex)是由一些字符和特殊符號組成的字符串,它描述了模式的重複或者表達多個字符。python通過標準庫中的re模塊來支持正則表達式。
  • Python正則表達式由淺入深(三)
    ,「^」符號在正則表達式不就是前面說的排除字符嗎?這個時候就可以使用正則表達式的中的排除字符「^」,可能大家會覺得很奇怪,這個不就是前面的行定位符嗎?,表示替換的最大次數,默認是替換所有flags:可選字符串,表示標誌位繼續我們前面提及的任務,我們使用re.sub()方法就可以用將message中的「川」字開頭的名稱替換成字符「***」:pattern=r"\b川.{2,3}"
  • 學習爬蟲的第49天,正則表達式被我踩在腳下
    正則表達式 描述了一種字符串匹配的模式,可以用來檢查一個字符串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。網上一搜,常用的正則表達式有60多個,關鍵是一個個都寫的跟天書一樣。好在老師說作為初學者,不要求全會,自己能寫一兩個即可,關鍵是能看懂別人寫的。
  • java正則表達式入坑指南
    在日常開發工作中,無論你使用的語言是java、python、shell、golang還是C#, 正則表達式是程式語言中幾乎繞不開的話題。有了它,可以幫你快速定位到符合條件的文本內容。今天小編帶大家一起來學習下正則表達式,相信通過這篇文章的介紹,能為以後的工作提供一個更清晰的思路。
  • Python正則表達式由淺入深(二)
    在前兩篇連載文章中,我們學習了re模塊的match()、search()、findall()方法,以及學習了使用正則表達式中常用的元字符、限定符、選擇字符、中括號來搭配這些方法來靈活處理常見的數據匹配問題。這本篇文章分鐘,我們將會進一步學習正則表達式中其他符合,包括令初學者非常頭疼的分組問題。
  • Python正則表達式由淺入深(一)
    幸運的是Python提供了re模塊,可以實現正則表達式的操作。re模塊主要通過六大方法來對字符串進行處理,包括:match()、search()、findall()、split()、sub()。這些方法涉及到字符串的匹配與替換等操作,在接下來的4篇連載文章裡,我們不單只會講解這4種方法,還會把元字符、行定位符、限定符、字符類、排除字符、選擇字符、轉義字符、分組等正則表達式最常用知識點貫穿起來。
  • 正則表達式斷言精講Java語法實現
    斷言本文目的是講解正則表達式之斷言用法。目前網際網路上有很多博文對斷言講解的並不透徹,如果您剛開始學習斷言,相信此博文會對您有幫助。1.2.3.1 情景導入假設,我要獲得一個字符串裡面所有以空格開頭的英文詞語。
  • JavaScript-正則表達式中的修飾符和對象有哪些?
    本節主要內容:1.什麼是正則表達式2.正則表達式進階3.正則表達式高級學習目標:一、正則表達式正則表達式執行原理是:通過【參數字符串】設置檢索規則,在【指定字符串】中檢索符合規則的字符串。正則表達式的作用是:可以用來進行文本搜索和文本替換。
  • PHP正則表達式及表單註冊案例
    正則表達式是一種具有特定模式的用來匹配文本的字符串
  • 《第3章 Python 運算符與表達式》3.1.1 算術運算符!
    《高中信息技術 Python編程》 教學案 《第3章 Python 運算符與表達式》3.1.1 算術運算符!3.1.1、算術運算符: 常規: + - * / 編程實例:原始碼:python = 95
  • 怎樣用正則表達式判斷輸入框中是否是車牌號
    我們在製作網頁時,會經常性的遇到判斷輸入框的輸入內容的問題,有時我們會單純的判斷長度,有時既要判斷輸入字符的長度,又要判斷其是否符合規定,下面小漁來教大家一個簡便的方法判斷輸入框中是否為車牌號【新建一個html文件】首先我們需要新建一個html文件,html頁面中主要列出兩個input,一個div,並為其添加相應的樣式即可
  • 做一個基於python的樹莓派MCU性能-溫度監控儀錶盤
    二、預備知識1、pillow庫PIL(Python Image Library)是python的第三方圖像處理庫,支持圖像的歸檔(Archives)、展示(Display)和處理(Processing)功能。
  • Python爬取B站彈幕並製作詞雲圖
    前言 本文的文字及圖片來源於網絡,僅供學習、交流使用,不具有任何商業用途,如有問題請及時聯繫我們以作處理。 在開發者工具當中,選擇你所需要爬取的url地址,查看headers其中的requests headers 中的cookie就是了。
  • Python 四大數據類型總結
    去最求平均去掉列表中的一個最小值和一個最大值後,計算剩餘元素的平均值。strip 用於去除字符串前後的空格:In [1]: ' I love python\t\n '.strip()Out[1]: 'I love python'replace 用於字符串的替換:In [2]: 'i love python'
  • 距離弄懂正則的環視,你只差這一篇文章
    上一篇文章《正則表達式匹配素數的原理講解》寫完之後,一些同學給我留言說對於正則表達式的「環視」不是很理解;希望我能夠講解一下關於環視部分的內容。那麼這篇文章的目的就是幫助大家理解什麼是環視,環視有什麼作用,以及在實際的開發中的一些例子。「相信閱讀本文之後,大家對於正則的環視會有更深入的理解。」
  • 使用Python從頭開始實現深度學習庫
    為此,可能需要將核心實現單元隱藏在幾個抽象層後面,這使得難以理解深度學習庫所基於的基本底層原理。因此,本文的目的是提供有關深度學習庫構建塊的見解。我們首先了解一些深度學習的背景知識,以了解功能要求,然後使用NumPy在python中使用一個簡單而完整的庫,該庫能夠端到端訓練神經網絡模型(非常簡單的類型)。在此過程中,我們將學習深度學習框架的各個組成部分。該庫不到100行代碼,因此應該很容易遵循。