程式設計師入門基礎:python正則表達式的零寬斷言

2021-01-05 肥貓技術生活

一、零寬斷言

此篇文章為python正則表達式的高階入門,正則基礎入門請參考程式設計師入門基礎:python的正則表達式。

斷言也可以理解為判斷的意思,正則表達式中有很多這樣的斷言,常見的如 ^ 和 /A,匹配字符串或者行的末尾 $ 和 /Z,單詞邊界/B等等。

零寬斷言是並不去真正的匹配字符串文本,而僅僅是匹配對應的位置,斷言本身並不匹配,因為匹配的寬度為零,故零寬。當然零寬斷言還有各種叫法,如環視、預搜索等。

常見的零寬斷言有四種形式,即正向肯定,正向否定,負向肯定,負向否定。

二、正向肯定

格式:(?=exp),正向(向右)匹配位置,但不計入結果

import re

#(?=dog)位置開始匹配,但不計入匹配結果

print("匹配開始位置dog:",re.search(r'(?=dog)dogeat',"dogeat@homework"))

#dog(?=eat)位置開始匹配,但(?=eat)不計入匹配結果

print("匹配開始位置eat:",re.search(r'dog(?=eat)eat',"dogeat@homework"))

#注意dog(?=homework)實際等於doghomework與原字符串不同,不可匹配

print("匹配開始位置homework:",re.search(r'dog(?=homework)@homework',"dogeat@homework"))

開始位置dog: <re.Match object; span=(0, 6), match='dogeat'>

開始位置eat: <re.Match object; span=(0, 6), match='dogeat'>

開始位置homework: None

三、正向否定

格式:(?!exp),正向(向右)否定匹配位置,但不計入結果

import re#

#@homework位置開始匹配,無aa,匹配成功

print("(?!aa)@homework:",re.search(r'(?!eat)@homework',"dogeat@homework"))

#dog位置開始匹配,後續無cat,匹配成功

print("dog(?!cat)eat:",re.search(r'dog(?!cat)eat',"dogeat@homework"))

#dog位置開始匹配,後續無eat,匹配失敗

print("dog(?!eat)@homework:",re.search(r'dog(?!eat)eat@homework',"dogeat@homework"))

(?!aa)@homework: <re.Match object; span=(6, 15), match='@homework'>

dog(?!cat)eat: <re.Match object; span=(0, 6), match='dogeat'>

dog(?!eat)@homework: None

四、負向肯定

格式:(?<=exp),負向(向左)匹配位置,但不計入結果。

特別注意,如遇負向零寬斷言(包括負向肯定與否定),正則驗證的順序為,先跳過斷言後,再從右向左驗證,即負向驗證。

import re##

#@homework位置開始向左匹配,匹配成功

print("(?<=eat)@homework:",re.search(r'(?<=eat)@homework',"dogeat@homework"))

#eat位置開始向左匹配,匹配成功

print("dog(?<=dog)eat:",re.search(r'dog(?<=dog)eat',"dogeat@homework"))

#eat@homework位置開始匹配,左側無eat,匹配失敗,應該為dog

print("dog(?<=eat)eat@homework:",re.search(r'dog(?<=eat)eat@homework',"dogeat@homework"))

(?<=eat)@homework: <re.Match object; span=(6, 15), match='@homework'>

dog(?<=dog)eat: <re.Match object; span=(0, 6), match='dogeat'>

dog(?<=eat)eat@homework: None

五、負向否定

格式:(?<!exp),負向(向左)否定匹配位置,但不計入結果。

import re###

#@homework位置開始向左匹配,匹配失敗

print("(?<!eat)@homework:",re.search(r'(?<!eat)@homework',"dogeat@homework"))

#eat位置開始向左匹配,匹配失敗

print("dog(?<!dog)eat:",re.search(r'dog(?<!dog)eat',"dogeat@homework"))

#eat@homework位置開始匹配,左側無eat,匹配成功,失敗時為dog

print("dog(?<!eat)eat@homework:",re.search(r'dog(?<!eat)eat@homework',"dogeat@homework"))

(?<!eat)@homework: None

dog(?<!dog)eat: None

dog(?<!eat)eat@homework: <re.Match object; span=(0, 15), match='dogeat@homework'>

六、總結

學習正則表達式,有些瑣碎,一定要多練習,有些東西記住後過一段時間就忘了,很正常。就像把這些知識存儲在硬碟裡,只要能做到快速調入內存(大腦)即可。

相關焦點

  • P18 Python正則表達式貪婪、向後引用、零款斷言
    title: P18|Python正則表達式中的貪婪、向後引用、零寬斷言author: Adolph Leecategories: 編程基礎tags:Python基礎正則表達式斷言在計算機編程中,正則表達式堪稱我們處理字符串的神奇
  • Python正則表達式急速入門
    正則表達式在程序開發中會經常用到,比如數據(格式)驗證、替換字符內容以及提取字符串內容等等情況都會用到,但是目前許多開發人員對於正則表達式只是處於了解或者是基本會用的階段。一旦遇到大批量使用正則表達式的情況(例如網絡爬蟲)可以說基本上就抓瞎了。這篇文章我將帶領大家利用 Python 來學習一下正則表達式。
  • 正則表達式斷言精講Java語法實現
    斷言本文目的是講解正則表達式之斷言用法。目前網際網路上有很多博文對斷言講解的並不透徹,如果您剛開始學習斷言,相信此博文會對您有幫助。1.2.3.1 情景導入假設,我要獲得一個字符串裡面所有以空格開頭的英文詞語。
  • 程式設計師入門基礎:python正則表達式貪婪匹配和非貪婪匹配
    此文為python正則表達式的高階入門,正則基礎入門請參考程式設計師入門基礎:python的正則表達式。一、貪婪匹配和非貪婪匹配舉例說明概念:print('非貪婪匹配',re.search('el+?'print('貪婪匹配',re.search('el+', 'hello world',re.I))貪婪匹配 <re.Match object; span=(1, 4), match='ell'>非貪婪匹配 <re.Match object; span=(1, 3), match='el'>從代碼中可以看出:貪婪模式:正則表達式一般趨向於最大字符長度的匹配
  • 30 分鐘輕鬆搞定正則表達式基礎
    但是針對字符串』W12345678『,只有第二個可以正確匹配出』12345678『,原因在於第一個正則表達式的意思匹配一個字符串只有6-10個數字組成,而第二個正則表達式意思是匹配字符串中的6-10個連續數字。除了這三個元字符表示位置外,還有零寬斷言、負向零寬斷言也表示位置,後續會詳細介紹。
  • 正則表達式(三)
    四、貪婪模式與非貪婪模式1.貪婪模式:正則表達式匹配時,會儘量多的匹配符合條件的內容舉例如下:注意:grep默認採用貪婪匹配,可能會對我們的測試結果造成幹擾,大家可以上網使用「正則在線轉換工具」進行測試2.非貪婪模式:正則表達式匹配時,會儘量少的匹配符合條件的內容,
  • 程式設計師入門基礎:python的正則表達式
    正則表達式是一個特殊的字符序列,它能幫助我們方便的檢查一個字符串是否與某種模式匹配。Python提供Perl 風格的正則表達式模式。re 模塊使 Python 語言擁有全部的正則表達式功能。一、正則表達式1、字符元素(可跳過)字符的匹配元素,比較瑣碎,簡單了解後即可,後期邊用邊查就記住了。
  • Python基礎學習筆記(十)正則表達式(上)
    正則表達式是什麼?正則表達式是一種特殊的字符串模式,用於匹配一組字符串,就好比模具做產品,而正則就是這個模具,定義一種規則去匹配符合規則的字符。如果我們對字符串有要求,我們就可以通過正則表達式把它表示出來,我們可以用正則表達式去匹配符合規則的字符串;正則表達式的處理對象是字符串,主要應用正則表達式的操作有:驗證查找替換1.
  • 一篇文章搞定Python正則表達式
    1.4 斷言與標記斷言不會匹配任何文本,只是對斷言所在的文本施加某些約束1 常用斷言:1.獲取正則表達式來提取字符串中符合要求的文本3. 替換查找字符串中符合正則表達式的文本,並用相應的字符串替換4. 分割使用正則表達式對字符串進行分割。
  • 三十一、深入Python中的正則表達式
    「@Author: Runsen」正則表達式應用的場景也非常多。常見的比如:搜尋引擎的搜索、爬蟲結果的匹配、文本數據的提取等等都會用到,所以掌握甚至精通正則表達式是一個硬性技能,非常必要。Python中則提供了強大的正則表達式處理模塊,即 re 模塊, 為Python的內置模塊。下面,我帶大家來一個入門demo例子,代碼如下:import rereg_string = "hello9527python@wangcai.@!
  • 原創通俗易懂的Python的正則表達式,建議收藏
    正則表達式正則表達式是一個特殊的字符序列,由普通字符和元字符組成。元字符能幫助你方便的檢查一個字符串是否與某種模式匹配。正則表達式應用的場景也非常多。常見的比如:搜尋引擎的搜索、爬蟲結果的匹配、文本數據的提取等等都會用到,所以掌握甚至精通正則表達式是一個硬性技能,非常必要。
  • Python正則表達式,從入門到實戰,精華都在這裡
    正則表達式的相關知識Python的中 re 模塊,主要是用來處理正則表達式一個利用 re 模塊通過正則表達式來進行網頁數據的爬取和存儲1.1 正則表達式及作用正則表達式的英文是 regular expression,通常簡寫為 regex、regexp 或者RE,
  • Python正則表達式:特殊符號和字符
    正表達式為高級的文本模式匹配,抽取,與/或文本形式的搜索和替換功能提供了基礎。簡而言之,正則表達式(簡稱regex)是由一些字符和特殊符號組成的字符串,它描述了模式的重複或者表達多個字符。python通過標準庫中的re模塊來支持正則表達式。
  • 教你學習:Python-100-Days-12 正則表達式
    教你學習: Python-100-Days-12 正則表達式本項目是參考項目內容,進行個人理解,和原有項目有出入,如想了解詳情,請自行百度去搜索項目在編寫處理字符串的程序或網頁時,經常會有查找符合某些複雜規則的字符串的需要,正則表達式就是用於描述這些規則的工具,換句話說正則表達式是一種工具
  • 德州點創教育JavaScript正則表達式授課大綱
    正則表達式有兩種創建方式:第一種:用RegExp()構造函數來創建RegExp對象var pattern = new RegExp("[abc]",許多標點符號都有特殊的含義,如果想到正則表達式中使用這些字符的直接量進行匹配,則必須使用前綴\特殊含義字符: ^ $ . * + = !
  • Python學習第135課——初步了解正則表達式以及正則表達式的用法
    【每天幾分鐘,從零入門python編程的世界!】從現在開始,我們學習正則表達式。正則表達式,又稱規則表達式。(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),計算機科學的一個概念。
  • 學習Python正則表達式
    Python中的正則表達式(re)就可以解決這個問題!正則表達式正則表達式是一個具有特殊字符的序列。它有助於檢查字符串中的每個字符,看它是否與某個模式匹配:哪些字符在什麼位置出現了多少次。result = re.findall(r』\d』, text)這將返回所有數字,但每個元素只有一個數字:['1', '0', '0', '1', '1', '1', '1', '2', '3', '4', '5', '6', '7']r-python原始字符串這裡,r表示python
  • Python「正則表達式」詳解(上)
    大家好,今天我們一起學習以下Python中的「正則表達式」,說到正則表達式,大家可能比較陌生,不過我卻要告訴你,你每天都在使用正則表達式,不要不承認,就問你最常見的,瀏覽器每天用不?淘寶經常逛不?你在搜索框裡輸入幾個文字,按下回車,就出來大量結果,你想想這是怎麼辦到的,是正則表達式,可以好不誇張的講,沒有正則表達式,就沒有搜尋引擎。
  • JavaScript正則表達式常用技巧
    正則表達式的掌握程度能粗略地看出程式設計師的技術底子,所以技術面試、編程競賽等 都特別喜歡考察正則表達式。本篇就帶你一起夯實一下 JavaScript 正則表達式的一些使用技巧:創建正則表達式在 JavaScript 的世界,創建正則表達式有2個方法: (1)使用一個正則表達式字面量,其由包含在斜槓之間的模式組成。
  • js正則表達式入門
    1、什么正則表達式正則表達式(regular expression)描述了一種字符串匹配的模式,可以用來檢查一個串是否含有某種子串、將匹配的子串做替換或者從某個串中取出符合某個條件的子串等。正則表達式並不是屬於某種語言的,它是一門獨立的語言,幾乎在所有的程式語言中都提供了相關支持(Javascript、PHP、Java、C++)以SQL語言為例:搜索功能精準匹配:$sql = 「select * from goods where title=』Nokia N95』」; //返回某個固定的結果模糊匹配: