python的正則(二):一些高級(jí)用法
正則基礎(chǔ)請(qǐng)閱讀:
python的正則(一):簡(jiǎn)單夠用的basic版
以下部分不學(xué)也問(wèn)題不大,不用焦慮。
特殊字符
(?aiLmsux) 等價(jià)于re.A, re.I, re.L, re.M, re.S, re.U, re.X
(?:...) 不分組
(?aiLmsux-imsx:...) 去除少量模式
(?P<name>...) 給分組起個(gè)名字
(?P=name) 按名字引用
(?#...) 只是個(gè)注釋
(?=...) 后面包含
(?。 后面不包含
(?<=...) 前面包含
(?<!...) 前面不包含
(?(id/name)yes-pattern|no-pattern) yes pattern不滿(mǎn)足時(shí),再匹配no pattern
一些例子:
#1. 不區(qū)分大小寫(xiě)
re.findall(r'(?i)abc', 'abcABCabc') #['abc', 'ABC', 'abc']
等同于:
re.findall(r'abc', 'abcABCabc', re.I)
#2. 給分組起個(gè)名字,看起來(lái)比更容易閱讀
m = re.search(r'.(?P<port>w+)s*((?=port))', '.a(chǎn)bc (abc),')
print(m.group('port') # abc
print(m.group(0)) # .a(chǎn)bc (abc)
#3. 向前看
m = re.search(r'(?<=inputswires)(?P<input>w+)', 'input wire abc')
print(m.group('input') # abc
#4. 正則不滿(mǎn)足時(shí),嘗試匹配另外一個(gè)正則
m = re.search(r'(output)?s+(?(1)reg|wire)s+(w+)', 'output reg abc')
print(m.group(2)) # abc
m = re.search(r'(output)?s+(?(1)reg|wire)s+(w+)', 'input wire abc')
print(m.group(2)) # abcre的幾個(gè)函數(shù)re.escape
re.escape(pattern),自動(dòng)把特殊字符轉(zhuǎn)義。
print(re.escape('[7:0]')) # [7:0]re.compile
re.compile(pattern, flags=0),正則編譯,一次編譯可以多處使用,加快正則執(zhí)行速度。
re.finditer
re.finditer(pattern, string, flags=0),返回iterator,就是可以用for循環(huán)依次處理的數(shù)據(jù)類(lèi)型,還可以獲得每個(gè)匹配字符串的開(kāi)始start()和結(jié)束end()位置。例如,
s = """
input wire a,
input wire b,
output wire c,
output wire d
"""
m = re.finditer(r'(?:input|output)s+wires+(w+)', s)
for i in m:
print("start=", i.start(), "end=", i.end(), "match=", i.group(1))
# start= 1 end= 13 match= a
# start= 15 end= 27 match= b
# start= 29 end= 42 match= c
# start= 44 end= 57 match= dre.sub處理復(fù)雜的查找替換
re.sub(pattern, repl, string, count=0, flags=0) 的repl不僅僅可以是字符串,也可以是一個(gè)函數(shù)。例如,下面是一個(gè)改變端口順序的正則例子,
s = """
module test
(a, b, c, d, e);
//...
endmodule
"""
def rep(m):
# 獲取待處理的字符串
s1 = m.group(0)
# 一大堆復(fù)雜的處理
port = re.search(r'((.*))', s1).group(1)
port = port.strip()
port = re.sub('s+', "", port)
port_list = port.split(',')
port_list = port_list[::-1];
s2 = re.sub(r'(?<=().*(?=))', ','.join(port_list), s1)
# 返回處理完的字符串,用于替換
return s2
s3 = re.sub(r'module.*?;', rep, 0, re.S)
print(s3)
#module test
# (e,d,c,b,a);
#
# //...
#
#endmodule

發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
最新活動(dòng)更多
-
6月20日立即下載>> 【白皮書(shū)】精準(zhǔn)測(cè)量 安全高效——福祿克光伏行業(yè)解決方案
-
7月3日立即報(bào)名>> 【在線(xiàn)會(huì)議】英飛凌新一代智能照明方案賦能綠色建筑與工業(yè)互聯(lián)
-
7月22-29日立即報(bào)名>> 【線(xiàn)下論壇】第三屆安富利汽車(chē)生態(tài)圈峰會(huì)
-
7.30-8.1火熱報(bào)名中>> 全數(shù)會(huì)2025(第六屆)機(jī)器人及智能工廠(chǎng)展
-
7月31日免費(fèi)預(yù)約>> OFweek 2025具身機(jī)器人動(dòng)力電池技術(shù)應(yīng)用大會(huì)
-
免費(fèi)參會(huì)立即報(bào)名>> 7月30日- 8月1日 2025全數(shù)會(huì)工業(yè)芯片與傳感儀表展
推薦專(zhuān)題
- 1 AI 眼鏡讓百萬(wàn) APP「集體失業(yè)」?
- 2 大廠(chǎng)紛紛入局,百度、阿里、字節(jié)搶奪Agent話(huà)語(yǔ)權(quán)
- 3 深度報(bào)告|中國(guó)AI產(chǎn)業(yè)正在崛起成全球力量,市場(chǎng)潛力和關(guān)鍵挑戰(zhàn)有哪些?
- 4 上海跑出80億超級(jí)獨(dú)角獸:獲上市公司戰(zhàn)投,干人形機(jī)器人
- 5 國(guó)家數(shù)據(jù)局局長(zhǎng)劉烈宏調(diào)研格創(chuàng)東智
- 6 下一代入口之戰(zhàn):大廠(chǎng)為何紛紛押注智能體?
- 7 百億AI芯片訂單,瘋狂傾銷(xiāo)中東?
- 8 Robotaxi新消息密集釋放,量產(chǎn)元年誰(shuí)在領(lǐng)跑?
- 9 一文看懂視覺(jué)語(yǔ)言動(dòng)作模型(VLA)及其應(yīng)用
- 10 格斗大賽出圈!人形機(jī)器人致命短板曝光:頭腦過(guò)于簡(jiǎn)單