1. 程式人生 > >python re.search 和 re.match 正則表示式

python re.search 和 re.match 正則表示式

原文:http://www.111cn.net/phper/157/37171_1.htm

一 re.search 和 re.match

python提供了2中主要的正則表示式操作:re.match 和 re.search。

match :只從字串的開始與正則表示式匹配,匹配成功返回matchobject,否則返回none;
search :將字串的所有字串嘗試與正則表示式匹配,如果所有的字串都沒有匹配成功,返回none,否則返回matchobject;(re.search相當於perl中的預設行為)

例項程式碼:

import re

def testsearchandmatch():
  s1="helloworld, i am 30 !"
  
  w1 = "world"
  m1 =  re.search(w1, s1)
  if m1:
    print("find : %s" % m1.group())
    
  if re.match(w1, s1) == none:
    print("cannot match")
    
  w2 = "helloworld"
  m2 = re.match(w2, s1)
  if m2:
    print("match : %s" % m2.group())

testsearchandmatch()
#find : world
#cannot match
#match : helloworld
 

二 re.compile 和 re.ignorecase

re.compile返回regrexobject物件, 用來重複使用regrexobject;

re.ignorecase用來在匹配時忽略大小寫;

例項程式碼:

def testcompile():
  regex = "d{3}-d{7}"
  
  regexobject = re.compile(regex)
  print(regexobject.search("aaa 027-4567892").group())
  print(regexobject.search("bbb 021-1234567").group())
  print(regexobject.search("ccc 010-123456"))

testcompile()
#027-4567892
#021-1234567
#none

def testignorecase():
  print(re.search('world', "hello world !").group())
  print(re.search('world', "hello world !", re.ignorecase).group())
  print(re.search('world', "hello world !"))
  
testignorecase()
#world
#world
#none

三 matchobject

matchobject為re.search,re.match等匹配成功後返回的物件,包含了匹配的結果。

在正則表示式中,可以使用()來將部分正則表示式分組且編號,編號從1開始,使用數字來使用,例如1 2 3,(?p<name>)還可以給分組命名, 使用(?p=name)來使用命名的組。

matchobject.group()包含了所有匹配的內容,等價於matchobject.group(0),此時的0表示所有的匹配;

matchobject.groups教程()包含了正則表示式中所有使用()定義的組對應的匹配內容;

matchobject.group(n),表示返回正則表示式中的第n個組()匹配的內容,此時n不為0, 等價於matchobject.groups()[n-1];

matchobject.lastindex, 表示正則表示式中分組()的個數;

 例項程式碼:

def testmatchobject():
  m = re.match(r"(?p<year>d{4})-(?p<month>d{2})-(?p<date>d{2})", "2010-10-01, i am very happy")
  print(m.group())
  print(m.group(0))
  
  print(m.groups())
  
  print(m.group(1))  
  print(m.groups()[0])
  
  print(m.group(2))  
  print(m.groups()[1])
  
  print(m.group(3))  
  print(m.groups()[2])
  
  print(m.groupdict())
  
  print(m.lastindex)

testmatchobject()
#2010-10-01
#2010-10-01
#('2010', '10', '01')
#2010
#2010
#10
#10
#01
#01
#{'date': '01', 'year': '2010', 'month': '10'}
#3
 

四 re和matchobject的方法split+findall+finditer+sub

split方法,使用給定的表示式來分割字串;

findall方法,返回所有的與給定的表示式匹配的一個list;

finditer方法,返回所有與給定的表示式匹配的matchobject的iterator;

sub方法,使用新的字串替換表示式匹配的字串;

例項程式碼:

def testreandmatchobjectmethonds():
  #split findall finditer sub  
  s1 = "i am working in microsoft !"
  l = re.split('s+', s1) # l is list type
  print( l)
  
  s2 = "aa 12 bb 3 cc 45 dd 88 gg 89"
  l2 = re.findall('d+', s2)
  print(l2)
  
  it = re.finditer('d+', s2) # it is one iterator type
  for i in it: # i is matchobject type
    print (i.group())
    
  s3 = re.sub('d+', '200', s2)
  print(s3)
  
testreandmatchobjectmethonds()
#['i', 'am', 'working', 'in', 'microsoft', '!']
#['12', '3', '45', '88', '89']
#12
#3
#45
#88
#89
#aa 200 bb 200 cc 200 dd 200 gg 200

五 re.search只返回第一個匹配

例項程式碼:

def testsearch():
  s1 = "bb 3 cc 45 dd 88 gg 89"
  m = re.search('d+', s1)
  print(m.group())

testsearch()
#3


相關推薦

python re.search re.match 表示式

原文:http://www.111cn.net/phper/157/37171_1.htm 一 re.search 和 re.match python提供了2中主要的正則表示式操作:re.match 和 re.search。 match :只從字串的開始與正則表示式匹配

python中常見的幾種表示式的使用(re.split、re.sub、re.matchre.search

一、正則表示式之分割 字串的分割是python最常用的操作之一,一般使用split函式,例如: s = "今天/天氣/真好" print(s.split('/')) 輸出為:[‘今天’,‘天氣’,‘真好’]。但split函式只能實現單個字元的分隔,但對於多個分

Python re.searchre.findall的比較

color 分析 pan findall python span sea 條件 一個 Python re.search和re.findall的比較: 先分析re.search import re s1=‘hjxxHelloxxrynxxPythonxxplkhjxxHix

python—【爬蟲】學習_2(表示式篇)3.re模組函式的深入理解

1. re.complie() 作用:如果需要重複地使用某個正則表示式,那麼你可以先將該正則表示式編譯成模式物件。complie()函式就幫助我們將正則表示式,編譯成為一個pattern物件。 2.re.search(pattern ,string) regex.search(strin

python爬蟲學習筆記6:表示式re

正則表示式 語法 常用操作符 re庫 import re re庫的主要功能函式 re.search() re.search(pattern,string,f

pythonre模組的使用(表示式

一、什麼是正則表示式? 正則表示式,又稱規則表示式,通常被用來檢索、替換那些符合某個模式(規則)的文字。 正則表示式是對字串操作的一種邏輯公式,就是用事先定義好的一些特定字元、及這些特定字元的組合,組成一個“規則字串”,這個“規則字串”用來表達對字串的一種過濾邏輯。 二、正則表示式的匹配規則 1.表示字元

Python學習筆記模式匹配與表示式之使用不使用表示式

 隨筆記錄方便自己和同路人查閱。 #------------------------------------------------我是可恥的分割線-------------------------------------------   假設你希望在字串中查詢電話號碼。你知道模式:3個數字,一

python—【爬蟲】學習_2(表示式篇)_2(practice)

習題來源:hackerrank  Matching Anything But a Newline(.的用法) answer :     regex_pattern = r"^(.{3}\.){3}.{3}$" Matching Digits &am

python—【爬蟲】學習_2(表示式篇)1.基礎知識

一、簡介 正則表示式本身是一種小型的、高度專業化的程式語言,而在python中,通過內嵌整合re模組,程式媛們可以直接呼叫來實現正則匹配。正則表示式模式被編譯成一系列的位元組碼,然後由用C編寫的匹配引擎執行。 r標識代表後面是正則的語句 二、正則表示式中常用的字元含義 1、普通字元和

自學python爬蟲(四)Requests+表示式爬取貓眼電影

前言 學了requests庫和正則表示式之後我們可以做個簡單的專案來練練手咯!先附上專案GitHub地址,歡迎star和fork,也可以pull request哦~ 地址:https://github.com/zhangyanwei233/Maoyan100.git 正文開始哈哈哈

只能輸入英文數字下劃線橫線的表示式

var reg="^[A-Za-z0-9-_]+$"  ; var regus = new RegExp(regs); regus.test("所要驗證的字串")  true 符合 false 不符合     中英文

Python爬蟲學習必備知識點:表示式模組詳解

一、基礎語法總結 1.1、匹配單個字元 a . d D w W s S [...] [^...] 匹配單個字元(.) 規則:匹配除換行之外的任意字元 In [24]: re.findall("f.o","foo is not fao") Out[24]: ['foo',

Python的學習筆記DAY10---關於表示式

        正則表示式用來匹配查詢文字和資料,簡單的說,是一些由字元和特殊符號組成的字串,描述了模式的重複或者表述多個字元。其能按照某種模式匹配一系列有相似特徵的字串。         Python中的正則表

Python高階程式設計(二)表示式

Python正則表示式 正則表示式是一個特殊的字元序列,它能幫助你方便的檢查一個字串是否與某種模式匹配。 Python 自1.5版本起增加了re 模組,它提供 Perl 風格的正則表示式模式。 re 模組使 Python 語言擁有全部的正則表示式功能。 compile 函式根據一個

java_簡單介紹,匹配頁面時經常會遇見各種不匹配,下面是我copy過來的一些語法嘗試一些常用表示式

正則表示式語法 一個正則表示式就是由普通字元(例如字元 a 到 z)以及特殊字元(稱為元字元)組成的文字模式。該模式描述在查詢文字主體時待匹配的一個或多個字串。正則表示式作為一個模板,將某個字元模式與所搜尋的字串進行匹配。 這裡有一些可能會遇到的正則表示式示例: Visual

少說話多寫程式碼之Python學習064——標準模組(表示式

Python中re模組包含的是對正則表示式的支援。正則表示式是一個很有趣,對處理字串作用比較大,我們可以花一點時間瞭解一下。 正則表示式是可以匹配文字片段的一組規則。最簡單的正則表示式就是一個字串,能匹配自身。比如字串a='迢遞嵩高下,歸來且閉關',可以匹配字串b='迢遞嵩高下,歸來且閉關'。

匹配搜尋引擎的title快照的表示式

360搜尋匹配下一頁的正則表示式 <a\sid=\Wsnext\W\shref=\W*\w*(.){1,500}>下一頁</a> 360搜尋匹配快照的正則表示式 htt

python處理異常、日誌以及表示式

異常捕獲 高階語言通常都內建了一套try…except…finally…的錯誤處理機制,Python也不例外。而且只要在合適的層次去捕獲錯誤就可以了。 def foo(s): return 10 / int(s) def bar(s):

相容ipv4ipv6的表示式

ipv4和ipv6的正則表示式,多個ip之間用英文分號分割。 如果想用英文逗號分割,只需修改下圖紅框修改為,即可。 正則如下: ^\s*(((([0-9A-Fa-f]{1,4}:){7}(([0-9A

python | 史上最全的表示式

1 Python 正則式的基本用法 --原文地址:http://blog.csdn.net/whycadi/archive/2008/01/02/2011046.aspxPython 的正則表示式的模組是 ‘re’, 它的基本語法規則就是指定一個字元序列,比如你要在一個字串 s=’123abc456’ 中查詢