導航:首頁 > 編程語言 > python正則匹配變數

python正則匹配變數

發布時間:2024-11-08 00:49:12

1. python 基礎教程 第10章,正則表達式匹配問題

importre

a=re.compile(r'[(.+?)]')
scope={}


defreplace(ddd):
code=ddd.group(1)
try:
returnstr(eval(code,scope))
exceptSyntaxError:
exec(code,scope)
returncode


print(a.sub(replace,'[x=1],[y=2],[z=2],thesumof[x],[z]and[y]is[x+y+z]'))

scope是在全局變數里保存正則匹配出來的x,y,z變數,存到全局變數里去;

這本書的案例在except SyntaxError:後面少了點代碼,只提供注釋,前面其實已經提到用exec賦值了,只是代碼里沒有體現出來,我完善了下這個應該能看懂了,還有[],正則已經把[]替換掉了,換成x,y,z對應的值

2. 強烈推薦!Python 這個寶藏庫 re 正則匹配


Python 的 re 模塊(Regular Expression 正則表達式)提供各種正則表達式的匹配操作。

在文本解析、復雜字元串分析和信息提取時是一個非常有用的工具 ,下面總結了 re 模塊的常用方法。


d 匹配所有的十進制數字 0-9

D 匹配所有的非數字,包含下劃線

s 匹配所有空白字元(空格、TAB等)

S 匹配所有非空白字元,包含下劃線

w 匹配所有字母、漢字、數字 a-z A-Z 0-9

W 匹配所有非字母、漢字、數字,包含下劃線


備註:符號.* 貪婪,符號.*? 非貪婪

[abc]:能匹配其中的單個字元

[a-z0-9]:能匹配指定范圍的字元,可取反(在最前面加入^)

[2-9] [1-3]:能夠做組合匹配

4.{ }:用於標記前面的字元出現的頻率,有如下情況:

{n,m}:代表前面字元最少出現n次,最多出現m次

{n,}:代表前面字元最少出現n次,最多不受限制

{,m}:代表前面字元最多出現n次,最少不受限制

{n}:前面的字元必須出現n次


字元串中有反斜杠的,需要對反斜杠做轉義


():分組字元,可以為匹配到的內容分組,快速獲取到分組中的數據 在正則裡面 "()" 代表的是分組的意思,一個括弧代表一個分組,你只能匹配到 "()" 中的內容。

group:用於查看指定分組匹配到的內容

groups:返回一個元組,組內為所有匹配到的內容

groupdict:返回一個字典,包含分組的鍵值對,需要為分組命名


作用:可以將字元串匹配正則表達式的部分割開並返回一個列表


flags定義包括:

re.I:忽略大小寫

re.L:表示特殊字元集 w, W, b, B, s, S 依賴於當前環境

re.M:多行模式

re.S:』.』並且包括換行符在內的任意字元(注意:』.』不包括換行符)

re.U:表示特殊字元集 w, W, b, B, d, D, s, S 依賴於 Unicode 字元屬性資料庫

在 Python 中使用正則表達式之前,先使用以下命令導入 re 模塊


例如:

『(d)(a)1』 表示:匹配第一是數字,第二是字元a,第三 1 必須匹配第一個一樣的數字重復一次,也就是被引用一次。

如 「9a9」 被匹配,但 「9a8」 不會被匹配,因為第三位的 1 必須是 9 才可以。

『(d)(a)2』 表示:匹配第一個是一個數字,第二個是a,第三個 2 必須是第二組()中匹配一樣的。

如 「8aa」 被匹配,但 「8ab」,「7a7」 不會被匹配,第三位必須是第二組字元的復製版,也是就引用第二組正則的匹配內容。





3. Python正則表達式的幾種匹配用法

下面列出: 1.測試正則表達式是否匹配字元串的全部或部分regex=ur"" #正則表達式
if re.search(regex, subject): do_something()else: do_anotherthing() 2.測試正則表達式是否匹配整個字元串 regex=ur"/Z" #正則表達式末尾以/Z結束
if re.match(regex, subject): do_something()else: do_anotherthing() 3.創建一個匹配對象,然後通過該對象獲得匹配細節(Create an object with details about how the regex matches (part of) a string) regex=ur"" #正則表達式
match = re.search(regex, subject)if match: # match start: match.start() # match end (exclusive): atch.end() # matched text: match.group() do_something()else: do_anotherthing() 4.獲取正則表達式所匹配的子串(Get the part of a string matched by the regex) regex=ur"" #正則表達式
match = re.search(regex, subject)if match: result = match.group()else: result ="" 5. 獲取捕獲組所匹配的子串(Get the part of a string matched by a capturing group) regex=ur"" #正則表達式
match = re.search(regex, subject)if match: result = match.group(1)else: result ="" 6. 獲取有名組所匹配的子串(Get the part of a string matched by a named group) regex=ur"" #正則表達式
match = re.search(regex, subject)if match:result = match.group"groupname")else:result = "" 7. 將字元串中所有匹配的子串放入數組中(Get an array of all regex matches in a string) result = re.findall(regex, subject) 8.遍歷所有匹配的子串(Iterate over all matches in a string) for match in re.finditer(r"<(.*?)/s*.*?//1>", subject) # match start: match.start() # match end (exclusive): atch.end() # matched text: match.group() 9.通過正則表達式字元串創建一個正則表達式對象(Create an object to use the same regex for many operations) reobj = re.compile(regex) 10.用法1的正則表達式對象版本(use regex object for if/else branch whether (part of) a string can be matched) reobj = re.compile(regex)if reobj.search(subject): do_something()else: do_anotherthing() 11.用法2的正則表達式對象版本(use regex object for if/else branch whether a string can be matched entirely) reobj = re.compile(r"/Z") #正則表達式末尾以/Z 結束
if reobj.match(subject): do_something()else: do_anotherthing() 12.創建一個正則表達式對象,然後通過該對象獲得匹配細節(Create an object with details about how the regex object matches (part of) a string) reobj = re.compile(regex) match = reobj.search(subject)if match: # match start: match.start() # match end (exclusive): atch.end() # matched text: match.group() do_something()else: do_anotherthing() 13.用正則表達式對象獲取匹配子串(Use regex object to get the part of a string matched by the regex) reobj = re.compile(regex) match = reobj.search(subject)if match: result = match.group()else: result ="" 14.用正則表達式對象獲取捕獲組所匹配的子串(Use regex object to get the part of a string matched by a capturing group) reobj = re.compile(regex) match = reobj.search(subject)if match: result = match.group(1)else: result ="" 15.用正則表達式對象獲取有名組所匹配的子串(Use regex object to get the part of a string matched by a named group) reobj = re.compile(regex) match = reobj.search(subject)if match: result = match.group("groupname")else: result ="" 16.用正則表達式對象獲取所有匹配子串並放入數組(Use regex object to get an array of all regex matches in a string) reobj = re.compile(regex) result = reobj.findall(subject) 17.通過正則表達式對象遍歷所有匹配子串(Use regex object to iterate over all matches in a string) reobj = re.compile(regex)for match in reobj.finditer(subject): # match start: match.start() # match end (exclusive): match.end() # matched text: match.group()字元串替換 1.替換所有匹配的子串 #用newstring替換subject中所有與正則表達式regex匹配的子串
result = re.sub(regex, newstring, subject) 2.替換所有匹配的子串(使用正則表達式對象) reobj = re.compile(regex) result = reobj.sub(newstring, subject) 字元串拆分 1.字元串拆分 result = re.split(regex, subject) 2.字元串拆分(使用正則表示式對象) reobj = re.compile(regex) result = reobj.split(subject)

4. Python用正則表達式匹配含有中文的字元串,匹配不到

代碼如下:

#coding=utf-8

importre
s=u'<li><aclass="nav-first"href="/">首頁</a></li>'
r=re.compile(u'<li><asclass="[^"]*"shref="[^"]">(.*?)(?=</a></li>)')
ss=r.findall(s)
forstrinss:
printstr

運行結果:

5. python 正則表達式,怎麼從字元串中匹配成組的所有結果

匹配所有結果的python程租迅序如下(注意圖中源前塌代碼的縮進)

import re

a="lege.teeth34eatedecdeath#e0t~"

regex='(.)e(.)t(.)'弊悔此

result=[]

for i in range(len(a)-4):

b=a[i:i+5]

obj=re.match(regex,b)

if obj:

result.append((obj.group(1),obj.group(2),obj.group(3)))

print(result)

閱讀全文

與python正則匹配變數相關的資料

熱點內容
怎樣把圖片分別放置在文件夾中 瀏覽:869
推流伺服器地址是什麼 瀏覽:628
java允許多重繼承 瀏覽:509
解壓小玩具好玩又可愛 瀏覽:406
騰訊雲大帶寬伺服器 瀏覽:818
加密鎖的售後 瀏覽:268
linux登不上去 瀏覽:729
聯想伺服器休眠後如何喚醒 瀏覽:111
四川話女孩學習編程 瀏覽:322
編譯原理文法區分 瀏覽:1001
教師可以做程序員嘛 瀏覽:637
終結戰場安卓國際服怎麼下載 瀏覽:155
現在的高端伺服器屬於什麼 瀏覽:810
企業銀行解壓流程 瀏覽:447
用app壓縮文件 瀏覽:227
柱子正負零加密區 瀏覽:322
車輛貸款交完要去4s店解壓 瀏覽:65
電腦可以運行plc編程嗎 瀏覽:594
下載app的怎麼連不上 瀏覽:765
程序員做量化交易有前途么 瀏覽:233