re 正則表達筆記

2021-10-24 20:50:45 字數 3623 閱讀 1094

# span:跨度

# pattern:模式

# todo: re.match

# todo: 返回開頭匹配的結果,若開頭無匹配項,則返回none

print(re.match('www', 'www.runoob.com'))

# print(re.match('www', 'www.runoob.com').span())

# (0, 3)

print(re.match('com', 'www.runoob.com'))

# none

# print(re.match('com', 'www.runoob.com').span())

# error: no span

# todo: matchobj.group

# todo: 括起來的元素將新增到.group中

# 定義字串

line = "cats are smarter than dogs!"

# 定義正則匹配結果

matchobj = re.match(r"(.*) are (.*?) .*", line, re.m|re.i)

print(type(matchobj))

# print(matchobj)

# print(matchobj.span())

# (0, 27)

print(matchobj.start())

# 0print(matchobj.groupdict())

# {}

print(matchobj.group())

# cats are smarter than dogs!

print(matchobj.groups())

# ('cats', 'smarter')

print(matchobj.group(1))

# cats

print(matchobj.group(2))

# smarter

# todo: re.search

# todo: 掃瞄整個字串,並返回第乙個成功的匹配

# todo: 替換

line = "cats are smarter than dogs!"

pattern = r"smarter"

repl = "stupid"

string = re.sub(pattern, repl, line)

print(string)

# cats are stupid than dogs!

# 或者轉化為 刪除

pattern = r"#.*$"

repl = ""

phone = "123456789 # 這是乙個國外**號碼"

string = re.sub(pattern, repl, phone)

print(string)

# 123456789

# 當repl 為乙個函式

pattern = r"(?p\d+)"

def repl_func(matchobj:classmethod):

# 將匹配的元組字串轉化為int

value = int(matchobj.group("value"))

return str(value * 2)

string = "x1s22f345df2brt01"

string_ = re.sub(pattern, repl_func, string)

print(string)

print(string_)

# todo: re.compile

# todo: 生成re.pattern類,具有re基礎方法:sub, split, search .match

# 生成匹配方法

matchpattern = re.compile(r"\d+")

print(type(matchpattern))

# # 呼叫class pattern方法

result = matchpattern.match("xx123") # 查詢頭部是否含有數字

print(result)

# none

result = matchpattern.match("***123",3,5) # 從第4個字元開始找

print(result)

# print(result.group())

# 12

print(result.span())

# (3, 5)

print(result.start())

# 3# todo: pattern.findall

# todo: 找到string中所有符合條件的元素:list

pattern = re.compile(r"\d+") # 匹配數字

result_list = pattern.findall("1a2d3c34kjdsf325saf45902df")

print(result)

# ['1', '2', '3', '34', '325', '45902']

print(type(result_list))

# # todo: pattern.finditer

# todo: 作用同findall,但返回物件為iter:matchobj(不是列表的iter,是matchobj的iter)

result_iter = pattern.finditer("12dkajsbu432kj23r5")

print(result_iter)

# print(type(result_iter))

# print(next(result_iter))

# print(next(result_iter).span())

# (9, 12)

# todo: pattern.split

# todo: 根據條件分割,返回列表

pattern = re.compile(r"\w+") # 非字元資料

result_list = pattern.split("ad qwd + 123 [sf=34-3&435s.?")

print(result_list)

# ['ad', 'qwd', '123', 'sf', '34', '3', '435s', '']

正規表示式中範圍只能表示單個字元,不能組合表示

如:[0~9] 不能[10~19] 

正規表示式re筆記

import re 1.re.match 只能從頭開始匹配 例如 ret re.match abc 123abc123abc 匹配abc失敗 ret re.match abc abc123 匹配abc成功 ret.span 返回匹配的索引範圍 0,2 ret.group 返回匹配的字元 abc 2....

Python筆記 re(正則)筆記

import rere.findall 返回匹配結果 列表 re.sub 替換字元 根據正則規則替換 re.compile 編譯正規表示式 當需要多次使用時更效率 re.findall 今天天氣 d c,多雲 待匹配字串 d 表示至少乙個數字 re.findall 記錄常用的 筆記 待匹配字串 表示...

正規表示式 RE

最近一段時間在研究nginx的rewirte重寫機制,因此對re需要有一定的了解,看了想關的文章,因此自己來寫一篇類似總結性的的文章。基本來說,正規表示式是一種用來描述一定數量文字的模式。regex regular express。本文用 regex 來表示一段具體的正規表示式。一段文字就是最基本的...