Python3正則表達式

  • 正則表達式是一個特殊的字符序列,他能幫助你方便的檢查一個字符串是否與某種模式匹配。

?

re.match函數

re.match嘗試從字符串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回一個none。

?

函數語法:

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

?

函數參數說明:

參數

描述

pattern

匹配的正則表達式

string

要匹配的字符串

flags

標志位,用于控制正則表達式的匹配方式

?

匹配成功re.search方法返回一個匹配的對象,否則返回None

我們可以使用group(num)或groups()匹配對象函數來獲取匹配表達式。

匹配對象方法

描述

group(num=0)

匹配整個表達式的字符串,group()可以一次輸入多個組號,在這種情況下它將返回一個包含那些組所對應的元組

groups()

返回一個包含所有小組字符串的元組,從1到所含小組號。

?

?

?

?

?

?

re.match和re.search的區別

re.match只匹配字符串的開始,如果字符串開始就不符合正則表達式,則匹配失敗,函數返回None,而re.search匹配整個字符串,直到找到一個匹配。

?

?

?

檢索和替換

?

Python的re模塊提供了re.sub用于替換字符串中的匹配項。

?

語法:

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

參數:

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

?

前三個為必選項,后兩個為可選參數。

?

?

?

repl參數是一個函數

將字符串中匹配的數字乘以2

?

?

?

compile函數:

compile函數用于編譯正則表達式,生成一個正則表達式(Pattern對象),供match()和search()這兩個函數使用。

語法格式如下:

re.compile(pattern[,flags])

?

參數:

  • l? pattern:? 一個字符串的正則表達式
  • l? flags:????? 可選,表示匹配模式,比如忽略大小寫,多行模式等。
  • l? re.l:????? 忽略大小寫
  • l? re.L:??????? 表示特殊字符集, \w,\W,\b,\B,\s,\S
  • l? re.M?????? 多行模式
  • l? re.S??????? 即為 ‘ . ’并且包括換行符在內的任意字符(‘ . ’ 不包括換行符)
  • l? re.U??????? 即為特殊字符集,\w,\W,\b,\B,\d,\D,\s,\S以來于Unicode字符屬性數據庫
  • l? re.X??????? 為了增加可讀性,忽略空格和’#’后面的注釋
##compile.py
import re
pattern = re.compile(r'\d+')                        #用于匹配至少一個數字
m = pattern.match('one12twothree34four')        #查找頭部,沒有匹配
print (m)m = pattern.match('one12twothree34four',2,10)    #從’e’位置開始查找,沒有匹配
print (m)m = pattern.match('one12twothree34four',3,10)    #從‘1’位置開始查找,正好匹配
print(m)                                        #返回一個Match對象print(m.group(0))                                #可省略0,以下相同
print(m.start(0))
print(m.end(0))
print(m.span(0))

運行結果:

exbot@ubuntu:~/workspace/python/20190917$ vim compile.py

exbot@ubuntu:~/workspace/python/20190917$ python3 compile.py

None

None

<_sre.SRE_Match object; span=(3, 5), match='12'>

12

3

5

(3, 5)

上述代碼中當匹配成功時返回一個Match對象,其中:

  • group([group1,…])方法用于獲取一個或多個分組匹配的字符串,當要獲取整個匹配的字串時,可直接使用group()或group(0)
  • start([group])方法用于獲取分組匹配的字串在整個字符串的起始位置(子串第一個字符索引),默認參數為0。
  • end([group])方法用于獲取分組匹配的子串在整個字符串的結束位置(子串最后一個字符的索引+1),默認參數為0
  • span([group])方法返回(start(group),end(group))

?

?

findall

在字符串中找到正則表達式所匹配的所有子串,并返回一個列表,如果沒有找到匹配的,則返回一個空表

注意:match和search時匹配一次,findall時匹配所有。

語法格式:

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

參數:

  • l? string???? 帶匹配的字符串
  • l? pos???????? 可選參數,指定字符串的起始位置,默認0
  • l? endpos?? 可選參數,指定字符串結束位置,默認為字符串長度

查找字符串中所有數字:

?

?

re.finditer

和findall類似,在字符串中找到正則表達式所匹配的所有子串,并把它們作為一個迭代器返回。

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

?

參數:

  • pattern:????? 匹配的正則表達式
  • string:???????? 要匹配的字符串
  • flags?????? :????????? 標志位,用于控制正則表達式的匹配方式

?

?

re.spilt

spilt方法按照能夠匹配的子串將字符串分割后返回列表,它的使用形式如下:

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

?

參數:

  • pattern:????? 要匹配的正則表達式
  • string:???????? 要匹配的字符串
  • maxsplit:???? 分割次數,maxsplit=1分隔一次,默認為0,不限制次數
  • flags:????????? 標志位,用于控制正則表達式的匹配方式

?

?

正則表達式對象:

?

re.RegexObject

re.compile()返回RegexObject對象

?

re.MatchObject

l? group()返回被RE匹配的字符串

l? start():? 返回匹配的開始的位置

l? end():?? 返回匹配結束的位置

l? span():??? 返回一個元組包含匹配的位置

?

正則表達式修飾符-可選標識

?

正則表達式可以包含一些可選修飾符來控制匹配的模式修飾符被指定為一個可選的標識,多個標志可以通過按位OR(|)它們來指定。

修飾符

描述

re.I

使匹配對大小寫不敏感

re.L

做本地化識別匹配

re.M

多行匹配,影響^和$

re.S

使 . 匹配包括換行符在內的所有字符

re.U

根據Unicode字符集解析字符,這個標志影響\w,\W,\b,\B

re.X

該標識通過給予你更靈活的格式以便你將正則表達式寫的更易于理解

?

正則表達式模板:

模式字符串使用特殊的語法來標識一個正則表達式:

字母和數字標識他們本身,一個正則表達式中的字母和數字匹配同樣的字符串。

多數字母和數字前加一個反斜杠會擁有不同的含義。

標點符號只有被轉義時才匹配自身,否則他們標識特殊的含義。

反斜杠本身需要反斜杠轉義。

由于正則表達式通常都包含反斜杠,所以最后使用原有字符串來標識他們。模式元素如(r’\t’,等價于\\t)匹配相應的特殊字符。

下標列出了正則表達式模式語法中的特殊元素。如果你使用了模式的同時,提供了可選標志參數,某些模式元素的含義會改變。

^

匹配字符串開頭

$

匹配字符串結尾

.

匹配任意字符,除了換行符,當re.DOTALL標記被指定時,則可以匹配包括換行符在內的任意字符

[...]

用來標識一組字符,單獨列出:[amk]匹配‘a’,’m’或’k’

[^...]

不在[]中的字符:[^abc]匹配除了a,b,c之外的字符

re*

匹配0個或多個表達式

re+

匹配1個或多個表達式

re?

匹配0個或1個由前面的正則表達式定義的片段,非貪婪方式

re{ n}

匹配n個前面表達式。例如:”o{2}”不能匹配“Bob”中的“o”,但是可以匹配“food”中的兩個“o”

re{ n,}

精確匹配n個前面的表達式。例如”o{2,}”不能匹配“Bob“中的”o“,但能匹配”fooood“中的所有”o“。”o{1,}“等價于”o+“。”o{0,}“則等價”o*“

re{ n,m}

匹配n到m次由前面的正則表達式定義的片段,貪婪方式

a| b

匹配a或b

(re)

匹配括號內的表達式,也表示一個組

(?imx)

正則表達式包含三種可選項,i,m,x。只影響括號中的區域

(?-imx)

正則表達式關閉i,m,x的可選標志,只影響括號中的區域。

(?:re)

類似(...),但是不表示一個組

(?imx:re)

在括號李使用i,m,x可選標示

(?-imx:re)

在括號中不使用i,m,x的可選標志

(?#...)

注釋

(?=re)

前向肯定界定符。如果所含正則表達式,以...表示,在當前位置成功匹配時成功,否則失敗。但一旦所含表達式已經嘗試,匹配引擎根本沒有提高;模式的剩余部分還要嘗試界定符的右邊

(?!re)

前向否定界定符。與肯定的界定符相反;當所含表達式不能在字符串當前位置匹配時成功

(?>re)

匹配的獨立模式,省去回溯

\w

匹配數字字母下劃線

\W

匹配非數字字母下劃線

\s

匹配任意空白字符,等價[\t\n\r\f]

\S

匹配任意非空字符

\d

匹配任意數字,等價于[0-9]

\D

匹配任意非數字

\A

匹配字符串開始

\Z

匹配字符串結束,如果是存在換行,只匹配到換行前的結束字符串

\z

匹配字符串結束

\G

匹配最后匹配完成的位置

\b

匹配一個單詞邊界,也就是指單詞和空格間的位置例如,‘er\b’可以匹配”never”中的’er’,不能匹配“verb“中的’er’

\B

匹配非單詞邊界。‘er\B’能匹配“verb“中的‘er’,但不能匹配”never“中的‘er’

\n,\t等

匹配一個換行符,匹配一個制表符等

\1...\9

匹配第n個分組

\10

匹配第n個分組的內容,如果它經匹配。否則指的是八進制字符碼的表達式

?

?

正則表達式實例:

?

字符匹配

python

匹配“python“

字符類

?

實例

描述

[Pp]ython

匹配“Python“或“python”

rub[ye]

匹配“ruby“或”rube”

[aeiou]

匹配括號里任意一個字母

[0-9]

匹配任何數字

[a-z]

匹配任何小寫字母

[A-Z]

匹配任何大寫字母

[a-zA-Z0-9]

匹配任何字母和數字

[^aeiou]

除了aeiou字母以外的所有字符

[^0-9]

匹配除了數字以外的字符

?

特殊字符類

實例

描述

.

匹配除“\n”之外的任何單個字符,要匹配包括’\n’在內的任何字符,情使用像‘[.\n]’的模式

\d

匹配一個數字字符,等價[0-9]

\D

匹配一個非數字字符,等價[^0-9]

\s

匹配任何空白字符,包括空格、制符表、換頁符等等。等價于[\f\n\t\r]

\S

匹配任何非空白字符。等價[^\f\n\t\r]

\w

匹配包括下劃線的任何單詞字符。等價于’[A-Za-z0-9]’

\W

匹配任何非單詞字符,等價于’[^A-Za-z0-9]’

轉載于:https://www.cnblogs.com/wanghao-boke/p/11542719.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/384827.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/384827.shtml
英文地址,請注明出處:http://en.pswp.cn/news/384827.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C/C++輸入

fgets(str,n,stdin) 從鍵盤輸入一行&#xff0c;替代gets()。讀取到n-1字節時或換行符時終止&#xff0c;如果是文件的話&#xff0c;讀到文件結尾也會停止 getline(cin,str) str的類型必須是string類&#xff0c;它是C特定的字符串類&#xff0c;區別于C的char *數據類型。 ci…

strlen和sizeof的區別

C語言中沒有字符串&#xff0c;用的是字符數組來模擬字符串。 C風格的字符串時字符數組然后在末尾加0表示結尾。 在C語言中有strlen和sizeof兩個函數求字符數組的長度函數&#xff0c;他們倆的區別就是是否把最后的結束標志也加上去。 strlen是不加的&#xff0c;他表示字符串的…

shell編程練習題

求2個數之和計算1-100的和將一目錄下所有的文件的擴展名改為bak編譯當前目錄下的所有.c文件&#xff1a;打印root可以使用可執行文件數&#xff0c;處理結果: roots bins: 2306打印當前sshd的端口和進程id&#xff0c;處理結果: sshd Port&&pid: 22 5412輸出本機創建20…

shell編程題(一)

求2個數之和 #!/bin/bashfunction add {if(( $# < 2 )); thenecho "The arg int correct"elsesum$(($1$2))echo $sumfi }add 1 add 1 2 運行結果&#xff1a; exbotubuntu:~/shareWin/linux/shell$ ./sum.sh 1 2The arg int correct3 $#&#xff1a;相當于C語言…

vimset

vim ~./vimrc set nocompatible "去掉有關vi一致性模式&#xff0c;避免以前版本的bug和局限 set nu! "顯示行號 set guifontLuxi/ Mono/ 9 " 設置字體&#xff0c;字體名稱和字號 filetype on …

shell編程題(二)

計算1-100之和 #!/bin/bashsum0 for i in seq 1 100;do #符號不是單引號 是 1左邊的符號sum$[$i $sum ] done echo $sum #!/bin/bashi0 n1              #定義循環變量 while [ $n -lt 101 ];do  #循環變量小于101 i$(( $i $n))        #累加 n$(( …

vim命令大全

1. vim模式 正常模式&#xff08;按Esc或Ctrl[進入&#xff09; 左下角顯示文件名或為空 插入模式&#xff08;按i進入&#xff09; 左下角顯示--INSERT-- 可視模式&#xff08;按v進入&#xff09; 左下角顯示--VISUAL-- 替換模式&#xff08;按r或R開始&#xff09; 左下角顯…

signal()函數

函數原型 void (*signal(int sig,void(*func)(int)))(int); 指定使用sig指定的信號編號處理信號的方法。參數func指定程序可以處理信號的三種方式之一&#xff1a; l 默認處理(SIG_DFL)&#xff1a; 信號由該特定信號的默認動作處理l 忽略信號&#xff08;SIG_IGN&a…

setitimer()函數

定時器時間函數 struct itimerval&#xff1a;struct itimerval *new_value&#xff0c;其定義如下&#xff1a;struct itimerval {struct timeval it_interval; /*next value*/struct timeval it_value; /*current value*/};struct timeval {long tv_sec; /*seconds*/lonng t…

shell編程題(三)

將一目錄下所有的文件的擴展名改為bak #! /bin/bashfor i in ls domv $i ${i%%.*}.bak done ${i%%.*} 截掉一個變量字符串第一個"."以及其右側的所有字符&#xff0c;即最短前綴匹配。 #! /bin/bashdir./ #指定文件夾for file in $dir*.txt #指定文件夾下面文件類型…

VMware安裝VMwaretools

默認點擊“安裝VMware Tools&#xff08;T&#xff09;”選項下載好安裝包 下載的安裝包放在計算機的media目錄下 進入/media/ubuntu14-04/VMware Tools目錄&#xff1a; cd /media/ubuntu14-04/VMware Tools 將安裝包復制到tmp文件夾下&#xff1a; cp VMwareTools-10.0.5-322…

shell編程題(四)

編譯當前目錄下的所有.c文件 #!/bin/bashif [ $# -lt 1 ] ;then #如果輸入參數小于1則報錯 $# C語言中的argv[0] 輸入參數個數echo "Please follow up file.c!"echo "eg: ./make.sh xxx.c"exit fiif [[ $2 "debug" ]] ;then #如果第三個參數…

stat函數

int lstat(const char *path,struct stat*buf) 當文件是一個符號鏈接時&#xff0c;lstat返回的是該符號鏈接本身的信息&#xff0c;而stat返回的是該鏈接指向的文件的信息。 struct stat {dev_t st_dev; //設備號碼ino_t st_ino; //inode節點號mo…

字符串函數參數傳入傳出(字符串反轉)

/*** strstr.c ***/ #include<stdio.h> #include<string.h>//求字符串p中abcd出現的次數 //自定義函數接口完成業務函數和main函數分開 int getCount(char *mystr,char *sub,int *ncount) {int ret 0;if(mystr NULL || sub NULL || ncount NULL){ret -1;print…

字符串函數參數傳入傳出(去空格)

字符串作為函數參數傳入傳出 /*** delSpace.c ***/ #include<stdio.h> #include<string.h>int DelSpace(char *str) {int iRet -1;int i ;int j ;int ncount 0;char *out str;if(NULL str ){printf("the point in is NULL\n");return iRet;}i 0;j …

字符串的規范使用

有一個字符串”1a2b3d4z”,&#xff1b; 要求寫一個函數實現如下功能&#xff0c; 功能1&#xff1a;把偶數位字符挑選出來&#xff0c;組成一個字符串1。valude&#xff1b;20分 功能2&#xff1a;把奇數位字符挑選出來&#xff0c;組成一個字符串2&#xff0c;valude 20 功能…

字符串的規范使用(二)

鍵值對&#xff08;”key valude”&#xff09;字符串&#xff0c;在開發中經常使用&#xff1b; 要求1&#xff1a;請自己定義一個接口&#xff0c;實現根據key獲取valude&#xff1b;40分 要求2&#xff1a;編寫測試用例。30分 要求3&#xff1a;鍵值對中間可能有n多空格&am…

字符串逆序打印

版本1 兩個指針從頭到尾和從尾到頭交換內容逆序 /*** str_reverse.c ***/ #include<stdio.h> #include<string.h>int main() {char buf[] "abcdrfg";int len strlen(buf);char *p1 buf;char *p2 buf len - 1;while(p1 < p2){char c *p1;*p1 *p…

realloc()函數

原型&#xff1a;extern void *realloc(void *mem_address, unsigned int newsize); 參數&#xff1a; mem_address&#xff1a; 要改變內存大小的指針名newsize &#xff1a; 新的內存大小。 如果分配內存減少&#xff0c;realloc僅僅改變索引的信息。 如果將…

fgets()函數

聲明&#xff1a;  char *fgets(char *str&#xff0c;int n,FILE* stream) 參數&#xff1a;  str—這是指向一個字符數組的指針&#xff0c;該數組存儲了要讀取的字符串 n – 這是要讀取的最大字符數&#xff08;包括最后的空字符&#xff09;。通常是使用以str傳遞的數組…