Python---正则表达式
生活随笔
收集整理的這篇文章主要介紹了
Python---正则表达式
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
正則表達式的基本語法我這里就不再敘述了,網(wǎng)上一大堆,我就不一一列舉了,用到的正則表達式我會在分析中列舉。
1. 寫一個正則表達式判斷一個字符串是否是ipv4地址。規(guī)則:一個ip地址由4個數(shù)字組成,每個數(shù)字之間用.連接。每個數(shù)字的大小是0-255 例如:255.189.10.37 正確,256.189.89.9 錯誤。
思路:首先可知ip是由四部分組成,但是前三部分可以同樣對待,最后一個由于少一個. 故分開對待處理。而且每個數(shù)字必須在0-255之間,其中處理0-255,可以按位數(shù)處理,三位即2、5、5,第一位[0-2],第二位[0-5],第三位[0-5]
import re re_str =r'(([0-1]?\d?\d?|2[0-4]\d|25[0-5])\.){3}([0-1]?\d?\d?|2[0-4]\d|25[0-5])' result = re.fullmatch(re_str,'255.183.10.37') print(result)運行效果圖如下:
運行效果圖如下:
2.使用正則表達式查找文本中最長的數(shù)字字符串。
首先,分兩種方法通過兩個不同的函數(shù)來實現(xiàn)。longest1(s):查找所有連續(xù)數(shù)字 、longest2(s):使用非數(shù)字作為分隔符。其中查找所有連續(xù)數(shù)字是\d來處理分割的、而使用非數(shù)字作為分隔符則通過[^\d]來分割實現(xiàn)的
import re def longest1(s):#查找所有連續(xù)數(shù)字t = re.findall('\d+',s)#findall(pattern,string[,flag])返回包含字符串中所有的與給定模式匹配的項的列表#print(t) #['123456789', '123', '456789']print(max(t,key = len))#max函數(shù)有兩個參數(shù):一個可迭代對象(a)和一個可選的“key”函數(shù)。 Key功能將用于評估a中最大的項目的值。if t:return max(t,key = len)#max() 方法返回給定參數(shù)的最大值,參數(shù)可以為序列。return -1def longest2(s):#使用非數(shù)字作為分隔符t = re.split("[^\d+]",s)#split(pattern,string[,maxsplit=0])根據(jù)模式匹配項分隔字符串#print(t) #['123456789', '', '123', '', '456789']if t:return max(t,key = len)return -1m = "123456789ss123dd456789"print(longest1(m)) print(longest2(m))效果圖如下:
3.將一句英語文本中的單詞進行倒置,標點不倒置,假設(shè)單詞之間使用一個或多個空格進行分割。比如I like beijing. 經(jīng)過函數(shù)后變?yōu)?#xff1a;beijing. like I。
首先,通過\s分割,分割之后存放到一個列表中,然后通過反轉(zhuǎn)輸出即可。這里為了格式的需求通過.join(t)以空格為分割來進行連接
import re def reverse(s):t = re.split("\s+",s.strip())#split(pattern,string[,maxsplit=0])根據(jù)模式匹配項分隔字符串t.reverse()#對列表的元素進行反向排序return ' '.join(t)#將序列中的元素以指定的字符連接生成一個新的字符串,這里是通過空格來連接t這個列表中的所有元素 print(reverse('I like beijing.')) print(reverse('Simple is better than complex.'))效果圖如下:
4.編寫程序,使用正則表達式提取另一個Python程序中的所有函數(shù)名。
import re fileName = input('請輸入一個 Python 程序文件名:') pattern = r'def (\w+)' funcNames = [] with open(fileName, encoding='utf8') as fp:for line in fp:result = re.findall(pattern, line)#findall(pattern,string[,flag])返回包含字符串中所有的與給定模式匹配的項的列表if result:funcNames.extend(result) print(funcNames) 該程序分析過幾天會更新的5.假設(shè)有一句英文,其中某個單詞中有個不在兩端的字母誤寫作大寫,編寫程序使用正則表達式進行檢查和糾正為小寫。注意不要影響每個單詞兩端的字母。
主要通過sub,將真?zhèn)€英文句子中分成三部分,開頭、中間、結(jié)尾,其中處理中間部分時,通過lower()方法處理一下即可
import re def checkModify(s):return re.sub(r'\b(\w)(\w+)(\w)\b',lambda x:x.group(1)+x.group(2).lower()+x.group(3),s) print(checkModify('aBc ABBC D eeee fFFFfF'))運行效果如下:
6.編寫程序,使用正則表達式提取另一個Python程序中的所有變量名。
import re fileName = input('請輸入一個 Python 程序文件名:') patterns = (r'(.+?)\s=',r'for (.+?) in',r'def \w+?\((.*?)\)',r' as (\w+?):') funcNames = [] with open(fileName, encoding='utf8') as fp:for line in fp:line = line.strip()for p in patterns:t = re.findall(p, line)if t:for item in t:funcNames.extend(item.split(',')) print(funcNames) 分析: 代碼關(guān)鍵有這些個: findall(pattern,string[,flag]) --- 返回包含字符串中所有的與給定模式匹配的項的列表 findall(p, line) --- 匹配line字符串中的p,其中p為 r'(.+?)\s=',r'for (.+?) in',r'def \w+?\((.*?)\)',r' as (\w+?):' strip()方法 移除字符串頭尾指定的字符(默認為空格或換行符)或字符序列用到的正則表達式: r‘xxxx’ --- 單引號里面的xxx原樣對待 () --- 將位于()中的內(nèi)容作為一個整體對待,表示一個子模式 \w --- 匹配任意字母、數(shù)字、以及下劃線,相當于[a-zA-Z0-9] ? --- 匹配位于?之前的0個或1個字符 + --- 匹配位于+之前的字符或子模塊的1次或多次的出現(xiàn) . --- 匹配除換行符以外的任意單個字符 * --- 匹配位于*之前的字符或子模式0次或多次出現(xiàn)總結(jié)
以上是生活随笔為你收集整理的Python---正则表达式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DNF高级强化
- 下一篇: Python---实验八