最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中正則表達式對單個字符,多個字符和匹配邊界等使用

 更新時間:2021年01月27日 10:03:13   作者:滌生手記  
這篇文章主要介紹了Python中正則表達式對單個字符,多個字符和匹配邊界等使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧

Regular Expression,正則表達式,又稱正規(guī)表示式、正規(guī)表示法、正則表達式、規(guī)則表達式、常規(guī)表示法(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),是計算機科學(xué)的一個概念。正則表達式是一個特殊的字符序列,它能幫助你方便的檢查一個字符串是否與某種模式匹配。在很多文本編輯器里,正則表達式通常被用來檢索、替換那些匹配某個模式的文本。

Python 自1.5版本起增加了re 模塊。re 模塊使 Python 語言擁有全部的正則表達式功能。

1.re.match函數(shù)

   python用re.match函數(shù)從字符串的起始位置匹配一個模式,若字符串匹配正則表達式,則match方法返回匹配對象(Match Object),否則返回None(注意不是空字符串"")。匹配對象Macth Object具有g(shù)roup方法,用來返回字符串的匹配部分。

   函數(shù)語法:re.match(pattern, string, flags) ;pattern是正則表達式,string需要匹配的字符串,flags為可選參數(shù)修飾符。

# 導(dǎo)入re模塊,注意match函數(shù)是從起始位置匹配的。如果起始位置匹配失敗,則返回None
import re
#match()函數(shù)適合匹配是否以xxxx開始的字符串,因為其從頭開始匹配的
ret = re.match("abc","aBCabc",re.I) #可選參數(shù)re.I表示忽略大小寫,后續(xù)詳細解釋。
print(ret.group()) #aBC
ret1 = re.match("abc","aBCabc")
print(ret1.group()) # 'NoneType' object has no attribute 'group'

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

修飾符 描述
re.I 使匹配對大小寫不敏感
re.L 做本地化識別(locale-aware)匹配
re.M 多行匹配,影響 ^ 和 $
re.S 使 . 匹配包括換行在內(nèi)的所有字符
re.U 根據(jù)Unicode字符集解析字符。這個標志影響 \w, \W, \b, \B.
re.X 該標志通過給予你更靈活的格式以便你將正則表達式寫得更易于理解。

2.正則表達式的語法

2.1正則表達式對字符(單個字符)的表示

字符 功能
. 匹配任意1個字符(除了\n),注意因為.表示任意一個字符,所以如果匹配‘.'則需要用轉(zhuǎn)義字符\.來表示
[ ] 匹配[ ]中列舉的字符,如果[a-zA-Z0-9],[a-zA-Z]表示所有字母和數(shù)字,后者表示所有字母,注意中間沒有空格符號。
\d 匹配數(shù)字,即0-9
\D 匹配非數(shù)字,即不是數(shù)字
\s 匹配空白,即 空格,tab鍵
\S 匹配非空白
\w 匹配單詞字符,即a-z、A-Z、0-9、_
\W 匹配非單詞字符

# 導(dǎo)入re模塊
import re
#1.測試.的使用,匹配任意字符開始的字符串
str='abc'
ret =re.match("..",str)
print(ret.group()) #ab.用兩個..就表示只要str字符串開頭是兩個字符即可。
ret1 = re.match("....",str) #這種情況則會報錯,因為str只有三個字符。
 
#2.匹配[]范圍內(nèi)的任意一個字符開頭的字符串
str1 = "abcABC*?//"
str2 = "3afasdlfadsf"
ret2 = re.match("[a-z]",str1).group() #a
ret3 = re.match("[123456]",str2).group() #3,[1-6]等價[123456]
 
#3./d的使用,表示匹配任意一個數(shù)字
str3 = "第5名是我"
ret4 = re.match("第\d名",str3).group()
print(ret4) #第5名
 
ret4 = re.match("第[0-9]名",str3) #同樣是表示0-9任意一個,[0-9]和\d效果一樣
print(ret4.group()) #第5名

 總結(jié):注意上面對字符的匹配都是表示一個任意字符,或者某個范圍內(nèi)的任意一個字符,屬于單個字符匹配。而實際開發(fā)中肯定都是用一個子串(多個字符)去匹配整個字符串。那么如何表示呢,請繼續(xù)下去。

2.2正則表達式匹配多個字符:數(shù)量的表示

匹配多個字符的相關(guān)格式,其實就是單個字符加上數(shù)量。注意下面數(shù)量的匹配都是針對前一個字符。

字符 功能
* 匹配前一個字符出現(xiàn)0次或者無限次,即可有可無
+ 匹配前一個字符出現(xiàn)1次或者無限次,即至少有1次
? 匹配前一個字符出現(xiàn)1次或者0次,即要么有1次,要么沒有
{m} 匹配前一個字符出現(xiàn)m次
{m,} 匹配前一個字符至少出現(xiàn)m次
{m,n} 匹配前一個字符出現(xiàn)從m到n次

# 導(dǎo)入re模塊
import re
 
#1.匹配第一個是大寫字母,第二個小寫字母,后面只要是小寫字母即可。
ret = re.match("[A-Z][a-z]*","Aafngsdfgnlsdf1224343")
print(ret.group()) #Aafngsdfgnlsdf
ret1 = re.match("[A-Z][a-z]*","AaAaaa34bbb")
print(ret1.group()) #Aa ,因為后面不是小寫字母所以沒匹配到。
 
#匹配下面字符串是否以字母或者下劃線開頭
ret = re.match("[a-zA-Z_]+[\w_]*","name1") #解釋1:[a-zA-Z_]+字母下劃線至少出現(xiàn)一次
print(ret.group()) #name1
 
ret = re.match("[a-zA-Z_]+[\w_]*","_name") #解釋2:[\w_]*表示字母,數(shù)據(jù)下劃線出現(xiàn)任意次
print(ret.group()) #_name
 
ret = re.match("[a-zA-Z_]+[\w_]*","2_name")
#print(ret.group()) #報錯,因為匹配不上,返回None.
 
 
#3.匹配前面字符出現(xiàn)0次或者1次使用?
ret = re.match("[1-9]?[0-9]","7")
print(ret.group()) #7
 
ret = re.match("[1-9]?[0-9]","33")
print(ret.group()) #33
 
ret = re.match("[1-9]?[0-9]","09")
print(ret.group()) #0
 
#4.前面字符出現(xiàn)n此,或者m-n范圍內(nèi)的任意次
ret = re.match("[a-zA-Z0-9_]{6}","dsa2A9nfdsf")
print(ret.group()) #dsa2A9,匹配前6位是數(shù)字字符下劃線即可
 
ret = re.match("[a-zA-Z0-9_]{3,8}","aSjsd239344")
ret1 = re.match("[a-zA-Z0-9_]{3,8}","aSjs")
print(ret1.group()) #aSjs,注意匹配前一個字符出現(xiàn)3-8次,只要這個范圍內(nèi)都算匹配成功,按實際匹配
print(ret.group()) #aSjsd239 匹配前一個字符出現(xiàn)3到8次
 
ret = re.match("[a-z0-9A-Z_]{3,}","a2")
print(ret.group()) #至少出現(xiàn)3次,所以如果只有兩個的話,返回None,調(diào)用報錯。

總結(jié):單個字符匹配,多個字符匹配上面都已經(jīng)演示過了,基本可以完成大多數(shù)字符串的匹配了。但是上面過于字符串的匹配都是從頭開始匹配的,而實際開發(fā)中可能是從字符串中間,后者結(jié)尾開始匹配的。keep reading....

2.3.正則表達式:匹配邊界的問題

字符 功能
^ 匹配字符串開頭
$ 匹配字符串結(jié)尾
\b
匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B 匹配非單詞邊界,'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。

# 導(dǎo)入re模塊
import re
 
# 匹配以@qq.com郵箱結(jié)尾的郵箱地址
#1.不適用匹配字符串結(jié)尾的$來實現(xiàn),注意.要用轉(zhuǎn)義字符,一般郵箱的長度都是4-30位
ret = re.match("[\w]{4,30}@qq\.com", "xiaoWang@qq.com")
print(ret.group()) #xiaoWang@qq.com
 
 
# 通過$來確定末尾,效率更高
ret = re.match("[\w]{4,30}@qq\.com$", "xiaoWang@qq.com")
print(ret.group()) #xiaoWang@qq.com
 
ret = re.match("[\w]{4,30}@qq\.com$", "xiaoWang@qq.com.cn")
#print(ret.group()) #報錯

到此這篇關(guān)于Python中正則表達式對單個字符,多個字符和匹配邊界等使用的文章就介紹到這了,更多相關(guān)Python 單字符,多字符匹配內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • windows下python 3.6.4安裝配置圖文教程

    windows下python 3.6.4安裝配置圖文教程

    這篇文章主要為大家詳細介紹了windows下python 3.6.4安裝配置圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Python實現(xiàn)二分查找與bisect模塊詳解

    Python實現(xiàn)二分查找與bisect模塊詳解

    二分查找又叫折半查找,二分查找應(yīng)該屬于減治技術(shù)的成功應(yīng)用。python標準庫中還有一個灰常給力的模塊,那就是bisect。這個庫接受有序的序列,內(nèi)部實現(xiàn)就是二分。下面這篇文章就詳細介紹了Python如何實現(xiàn)二分查找與bisect模塊,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • python腳本實現(xiàn)驗證碼識別

    python腳本實現(xiàn)驗證碼識別

    這篇文章主要為大家詳細介紹了python腳本實現(xiàn)驗證碼識別的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Python之PyUnit單元測試實例

    Python之PyUnit單元測試實例

    這篇文章主要介紹了Python之PyUnit單元測試實例,是非常實用的技巧,需要的朋友可以參考下
    2014-10-10
  • python實現(xiàn)ip地址的包含關(guān)系判斷

    python實現(xiàn)ip地址的包含關(guān)系判斷

    這篇文章主要介紹了python實現(xiàn)ip地址的包含關(guān)系判斷,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • pandas中read_excel()函數(shù)的基本使用

    pandas中read_excel()函數(shù)的基本使用

    在Python的數(shù)據(jù)處理庫pandas中,read_excel()函數(shù)是用于讀取Excel文件內(nèi)容的強大工具,本文就來介紹一下如何使用,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • python中flatten()參數(shù)示例詳解

    python中flatten()參數(shù)示例詳解

    flatten是numpy.ndarray.flatten的一個函數(shù),即返回一個一維數(shù)組,這篇文章主要給大家介紹了關(guān)于python中flatten()參數(shù)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • 使用Pytorch實現(xiàn)two-head(多輸出)模型的操作

    使用Pytorch實現(xiàn)two-head(多輸出)模型的操作

    這篇文章主要介紹了使用Pytorch實現(xiàn)two-head(多輸出)模型的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • python簡單貪吃蛇開發(fā)

    python簡單貪吃蛇開發(fā)

    這篇文章主要為大家詳細介紹了python簡單貪吃蛇開發(fā),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Python實現(xiàn)位圖分割的效果

    Python實現(xiàn)位圖分割的效果

    目前網(wǎng)絡(luò)上大多為用C++或者Matlab編寫實現(xiàn)位圖分割,所以本文將使用Python實現(xiàn)位圖分割這一效果,代碼簡單易懂,感興趣的小伙伴可以關(guān)注一下
    2021-11-11

最新評論

大同市| 平昌县| 麦盖提县| 齐河县| 乌鲁木齐市| 蒙山县| 乌拉特中旗| 呼图壁县| 建始县| 谷城县| 怀化市| 沂水县| 青浦区| 万宁市| 娄底市| 满城县| 峨眉山市| 屏山县| 潜江市| 德安县| 和平区| 息烽县| 龙井市| 阿克苏市| 铜川市| 友谊县| 化州市| 中宁县| 隆化县| 红安县| 鹤山市| 镇雄县| 怀柔区| 石城县| 沅江市| 台南市| 东宁县| 西平县| 崇仁县| 景谷| 阿克陶县|