python正則表達式修飾符_Python正則表達式

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

re 模塊使 Python 語言擁有全部的正則表達式功能。

compile 函數根據一個模式字符串和可選的標志參數生成一個正則表達式對象。該對象擁有一系列方法用于正則表達式匹配和替換。

re 模塊也提供了與這些方法功能完全一致的函數,這些函數使用一個模式字符串做為它們的第一個參數。

本章節主要介紹Python中常用的正則表達式處理函數。

re.match函數

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

函數語法:re.match(pattern,?string,?flags=0)

函數參數說明:

實例 1:

#!/usr/bin/python

#?-*-?coding:?UTF-8?-*-

import?re

print(re.match('www',?'www.baidu.com').span())??#?在起始位置匹配

print(re.match('com',?'www.baidu.com'))?????????#?不在起始位置匹配

#!/usr/bin/python

import?re

line?=?"Cats?are?smarter?than?dogs"

matchObj?=?re.match(?r'(.*)?are?(.*?)?.*',?line,?re.M|re.I)

if?matchObj:

print?"matchObj.group()?:?",?matchObj.group()

print?"matchObj.group(1)?:?",?matchObj.group(1)

print?"matchObj.group(2)?:?",?matchObj.group(2)else:

print?"No?match!!"

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

正則表達式可以包含一些可選標志修飾符來控制匹配的模式。修飾符被指定為一個可選的標志。多個標志可以通過按位 OR(|) 它們來指定。如 re.I | re.M 被設置成 I 和 M 標志:

正則表達式模式

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

字母和數字表示他們自身。一個正則表達式模式中的字母和數字匹配同樣的字符串。

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

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

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

由于正則表達式通常都包含反斜杠,所以你最好使用原始字符串來表示它們。模式元素(如 r'/t',等價于'//t')匹配相應的特殊字符。

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

模式描述

^匹配字符串的開頭

$匹配字符串的末尾。

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

[...]用來表示一組字符,單獨列出:[amk] 匹配 'a','m'或'k'

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

re*匹配0個或多個的表達式。

re+匹配1個或多個的表達式。

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

re{ n}

re{ n,}?精確匹配n個前面表達式。

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

a| b匹配a或b

(re)G匹配括號內的表達式,也表示一個組

(?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匹配字符串結束,如果是存在換行,只匹配到換行前的結束字符串。c

\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]匹配任何數字。類似于 [0123456789]

[a-z]匹配任何小寫字母

[A-Z]匹配任何大寫字母

[a-zA-Z0-9]匹配任何字母及數字

[^aeiou]除了aeiou字母以外的所有字符

[^0-9]匹配除了數字外的字符

特殊字符類

實例描述

.匹配除 "\n" 之外的任何單個字符。要匹配包括 '\n' 在內的任何字符,請使用象 '[.\n]' 的模式。

\d匹配一個數字字符。等價于 [0-9]。

\D匹配一個非數字字符。等價于 [^0-9]。

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

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

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

\W匹配任何非單詞字符。等價于 '[^A-Za-z0-9_]'。

re.match與re.search的區別

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

實例:

#!/usr/bin/python

import re

line = "Cats are smarter than dogs";

matchObj = re.match( r'dogs', line, re.M|re.I)

if matchObj:

print "match --> matchObj.group() : ", matchObj.group()

else:

print "No match!!"

matchObj = re.search( r'dogs', line, re.M|re.I)

if matchObj:

print "search --> matchObj.group() : ", matchObj.group()

else:

print "No match!!" 以上實例運行結果如下:

No match!!

search --> matchObj.group() : ?dogs

檢索和替換

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

語法:

re.sub(pattern, repl, string, max=0)

返回的字符串是在字符串中用 RE 最左邊不重復的匹配來替換。如果模式沒有發現,字符將被沒有改變地返回。

可選參數 count 是模式匹配后替換的最大次數;count 必須是非負整數。缺省值是 0 表示替換所有的匹配。

實例:

#!/usr/bin/python

import re

phone = "2014-959-559 # This is Phone Number"

# Delete Python-style comments

num = re.sub(r'#.*$', "", phone)

print "Phone Num : ", num

# Remove anything other than digits

num = re.sub(r'\D', "", phone)

print "Phone Num : ", num 以上實例執行結果如下:

Phone Num : ?2014-959-559

Phone Num : ?2014959559

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

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

相關文章

當代最值得收藏的畫家作品_當代最具潛力和收藏價值的十大畫家

原標題:當代最具潛力和收藏價值的十大畫家當代從事繪畫的人成千上萬,哪些名家作品值得收藏?當前都有哪些“潛力股”,相關專家綜合市場分析,純從藝術水準上列出值得收藏的“潛力股”,供愛好書畫收藏的各界人…

備抵附加賬戶的期末余額_會計賬戶的分類(二)

待攤費用賬戶的格式和運用方法同盤存類賬戶,即:期初如果有余額在借方,本期發生額的增加數在借方,本期發生額的減少數在貸方,期末如果有余額在借方。預提費用賬戶是指用來核算和監督按規定預先提取計入當期,…

mysql union all 別名_mysql union和union all

如下先創建2個表,aa bb.CREATE table aa(uid int(20) not null,name VARCHAR(30) not null)engineinnodb default charsetutf8mb4 COLLATE utf8mb4_general_ci;INSERT INTO aa(uid, name) VALUES (10, 張芳);INSERT INTO aa(uid, name) VALUES (11, 王凱);INSERT IN…

MySQL不走聯合索引_mysql group by 多列優化思路?為什么不走聯合索引?

explain SELECT a, b, COUNT(*) FROM tbnameGROUP BY a, border by a DESClimit 1a 和 b 列已經設置聯合索引, 為什么這種操作也會執行全表掃描呢?explain SELECT a, b FROM tbnameGROUP BY a, border by a DESC去掉 COUNT 和 limit 則走索引沒有掃描&am…

mysql ddl 鎖_MySQL Online DDL導致全局鎖表案例分析

MySQL Online DDL導致全局鎖表案例分析我這邊遇到了什么問題?線上給某個表執行新增索引SQL, 然后整個數據CPU打到100%, 連接數暴增到極限, 最后導致所有訪問數據庫的應用都奔潰.SQL如下:ALTER TABLE bookADD INDEX idx_sub_title (sub_title ASC);能看到什么?10063293, root,…

ci框架 亂碼 mysql_mysql容器亂碼問題

在docker-compose.yml文件中定義mysql導入utf-8的萬國碼services:mysql:image:mysql:5.7# command: [--character-set-serverutf8mb4, --collation-serverutf8mb4_unicode_ci]volumes:-./data/docker/mysql:/var/lib/mysql-./mysql/:/docker-entrypoint-initdb.d/-./conf/mys…

mysql分表 查詢 優化_MySQL性能管理及架構(查詢優化、分庫分表)一遍文章搞定...

相關配置參數:slow_query_log # 啟動停止記錄慢查日志,慢查詢日志默認是沒有開啟的可以在配置文件中開啟(on)slow_query_log_file # 指定慢查日志的存儲路徑及文件,日志存儲和數據從存儲應該分開存儲long_query_time # 指定記錄慢查詢日志SQL…

dokcer mysql修改編碼_默認支持utf8編碼的mysql docker鏡像

其他人都是不正確的使用mysql容器鏡像可以很快速的運行mysql,免去了傳統的虛擬機安裝方式的繁瑣配置。但是使用官方的mysql鏡像,你會遇到中文亂碼的問題,原因是官方鏡像的字符集默認值不是utf8。這時候你去google,會找到一些文章&…

mysql臨時表 清空_在數據庫中臨時表什么時候會被清除呢

展開全部我們仍使用 實驗 05 中的環境,略去準備數據的過程。我們仍然使用兩個會話,62616964757a686964616fe59b9ee7ad9431333433646439一個會話 run,用于運行主 SQL;另一個會話 ps,用于進行 performance_schema 的觀察…

locust mysql_locust性能壓測連接mysql,隨機取出班級,綁定學生

from locust import HttpLocust, TaskSet, taskimport pymysqlimport randomclass UserBehavior(TaskSet):def on_start(self):db pymysql.connect("ip地址", "用戶名", "密碼", "數據庫")cursor db.cursor()cursor.execute("S…

mysql無法添加或更新子行_違反完整性約束:1452無法添加或更新子行:

我試圖在我的注釋表中插入值,但出現錯誤。俗話說,我不能添加或更新子行,我也不知道這意味著什么。我的架構看起來像這樣-- ------------------------------ Table structure for comments-- ----------------------------DROP TABLE IF EXIST…

python醫學圖像分割_基于cv2的醫學圖像分割

例如,圖像如下所示:import cv2import numpy as npimg cv2.imread("mdb168.pgm",0)import matplotlib.pyplot as pltplt.imshow(img, cmap"gray")我想刪除圖像中所有的偽影和不必要的部分。在為此,我首先對圖像進行二值化…

python解析response的json_從HTML responseTex解析JSON

因此,我大體上同意,更好的解決方案是確保服務器只返回JSON,不過這是通過客戶端Javascript實現的一種快速方法,如Barmer所建議的那樣,將html解析到DOM,獲取body中的文本childNode并在其上運行JSONParse。在v…

mysql 密碼修改時間_Mysql修改密碼的方法

修改mysql密碼的方法:最簡單的,在Navicat連接后點用戶,找到rootlocalhost直接修改。注意如果裝了xampp,在phpmyadmin配置文件也需要改兩處密碼。下面是在命令行修改的方法。方法1:用mysqladmin----------------親測這個…

svn版本庫瀏覽器_在SVN版本庫瀏覽器中直接編輯文件保存后不會彈..._網絡編輯_幫考網...

原因是沒有實際添加到版本庫中,要添加到版本庫必須執行“Commit”。具體分析如下:SVN錯誤處理svn : Couldn’t perform atomic initialization. 臨時解決辦法:升級sqlite。原本安裝的是 subversion 1.6.16 sqlite 3.6.13,一直報”…

ubuntu下使用python將ppt轉成圖片_Ubuntu下使用Python實現游戲制作中的切分圖片功能...

本文實例講述了Ubuntu下使用Python實現游戲制作中的切分圖片功能。分享給大家供大家參考,具體如下:why拿到一個人物行走的素材,要用TexturePacker打包。TexturePacker打包后,助于游戲加載圖片效率,且比較好管理。目前得…

世上最簡單的mysql_mysql這樣學最簡單|基本操作上

這是數據庫系列的第一篇文章,主要是對mysql的基本操作有一個了解。本系列的教程會先從基礎出發,逐步過渡到優化。一、前提在這里我們不會從如何去安裝數據庫開始講起,而是在安裝完之后從操作數據庫開始,文中所有的代碼均在我自己的…

django ipython shell_django shell ipython 模型層優化(關聯對象) 懶加載和預加載 +長鏈接...

懶加載存在于外鍵和多對多關系不檢索關聯對象的數據調用關聯對象會再次查詢數據庫問題根源查看django orm的數據加載,兩次. 查詢user,查詢menu第一次查詢 用戶表 第二次查詢 app表cmd:python manage.py shell #進入shell調試 或者ipythonfrom authorization.models import Use…

zabbix4.0添加mysql報警_Zabbix4.0系統告警“Zabbix server is not running”

第一步: 查看系統日志,進一步確認原因1 cat /var/log/zabbix/zabbix_server.log問題出現在數據庫。第二步 數據庫確認1 mysql -u root -p #root用戶登陸數據庫如果登錄不成功,就看一下登錄密碼是否正確以及zabbix用戶是否有權限登錄數據庫。1…

影響索引的mysql函數_mysql索引對排序的影響實例分析

本文實例講述了mysql索引對排序的影響。分享給大家供大家參考,具體如下:索引不僅能提高查詢速度,還可以添加排序速度,如果order by 后面的語句用到了索引,那么將會提高排序的速度。測試1、創建測試表:t15表…