正規表示式學習小結

2021-09-10 07:35:39 字數 4736 閱讀 1380

常用語法表 語法

描述.匹配任何字元,除了換行符

\w匹配總目,數字及下劃線

\w匹配不是字母,數字及下劃線的字元

\s匹配任意空白字元,等價於[\t\n\r\f]

\s匹配任意非空字元

\d匹配任意數字,等價於[0-9]

\d匹配任意非數字的字元

\a匹配字串開頭

\b匹配·乙個字邊界, 即字與空格間的位置

\b非字邊界匹配

\z匹配字串結尾,如果存在換行,只能匹配到換行前的結束字串

\z匹配字串結尾,如果存在換行,同時還會匹配換行符

\g匹配最後匹配完成的位置

\n匹配乙個換行符

\t匹配乙個製表符

\v匹配乙個垂直製表符

^匹配一行字串的開頭

$匹配一行字串的結尾

[...]用來表示一組字元,單獨列出,比如[dhb]匹配d、h或b

[^...]匹配不在中的字元,除x、x、x之外的

*匹配0個或多個表示式

+匹配乙個或多個表示式

?匹配0個或1個前面的正規表示式定義的片段,非貪婪方式

精準匹配n個前面的表示式

匹配n到m次由前面正規表示式定義的片段,貪婪方式

|,a|b指明兩項之間的乙個選擇,匹配a或b

()匹配括號內的表示式

import re

content = 'hello 123 4576 world_this is a regex demo'

print(len(content))

# match()方法,第乙個引數傳入正規表示式,第二個引數傳入要匹配的字串

result = re.match('^hello.*demo$', content) # (.點)可以匹配任意字元(除換行符),*(星)代表匹配前面的字元無限次

print(result)

print(result.group())

# group()方法可以輸出匹配到的內容

print(result.span())

# span()方法可以輸出匹配的範圍

"""result = re.match('^hello\s(\d+)\sworld', content) # ()把想要提取的字元括起來

print(froup(1)) # 輸出第乙個被()的匹配結果

"""

import re

content = 'hello 1234567 world_this is a regex demo'

result = re.match('^he.*(\d+).*demo$', content)

print(result)

print(result.group(1))

# 貪婪匹配

# .*會匹配盡可能多的字元。正規表示式中.*後面是\d+,也就是至少乙個數字,並沒有指定具體多少個數字,

# .*就盡可能匹配多的字元,把123456 匹配了,給\d+留下乙個可滿足條件的數字7 ,最後得到的內容就只有數字7

import re

content = 'hello 1234567 world_this is a regex demo'

result = re.match('^he.*?(\d+).*demo$', content)

print(result)

print(result.group(1))

# 非貪婪匹配,盡可能匹配較少的字元

# 當.*?匹配到hello 後面的空向字元時,再往後的字元就是數字了,而\d+恰好可以匹配,那麼這裡.*?的就不再進行匹配,交給\d+去匹配後面的數字

import re

content = '''hello 1234567 world_this

is a regex demo'''

result = re.match('^he.*?(\d+).*demo$', content)

print(result)

print(result.group(1))

# attributeerror: 'nonetype' object has no attribute 'group'

# 因為.匹配的是除換行符之外的任意字元,當遇到換行符時,.就不能匹配了

result = re.match('^he.*?(\d+).*demo$', content, re.s)

# re.s修飾符的作用是使.匹配包括換行符在內的所有字元

修飾符

修飾符描述re.i使匹配對大小寫不敏感

re.l做本地化識別匹配

re.m多行匹配,影響^和$

re.s使.匹配包括換行在內的所有字元

re.u根據unicode字符集解析字元,影響\w,\w,\b和\b

re.x給予更靈活的格式使正則書寫更易於理解、

import re

print(result)

# 當遇到用於正則匹配模式的特殊字元時,在前面加反斜線轉義一下即可

import re

content = 'extra stings hello 1234567 world_this is a regex demo extra strings'

result = re.search('hello.*?(\d+).*?demo', content)

print(result)

# html = '''# #     往事隨風

# # 光輝歲月

# 記事本

# # 但願人長久

# '''

import re

# 想獲取singer屬性值,需要寫入singer=「(.*?)」,需要獲取的用小括號包括住,文字的兩側邊界是雙引號

# 獲取a標籤內容,兩側邊界是《與,中間內容用(.*?)匹配

result = re.search('(.*?)', html, re.s)

if result:

print(result.group(1), result.group(2))

import re

results = re.findall('(.*?)', html, re.s)

print(results)

print(type(results))

for result in results:

print(result)

print(result[0], result[1], result[2])

import re

content = '95ak47uz98kb23fu2d4h'

content = re.sub('\d+', '', content)

# 第乙個引數傳入要匹配的值,第二個引數為替換的字串(去掉賦值為空),第三個引數為待解析的字串

print(content)

# 方法比較

import re

results = re.findall('\s*?()?(\w+)()?\s*?', html, re.s)

for result in results:

print(result[1])

# 先用sub()方法將a 節點去掉,只留下文字,然後再利用findall()提取

html = re.sub('|', '', html)

print(html)

results = re.findall('(.*?)', html, re.s)

for result in results:

print(result.strip())

import re

content1 = '2019-1-28 20:00'

content2 = '2019-1-29 12:00'

content3 = '2019-1-30 21:20『

# compile()類似封裝的意思,還可以傳入修飾符,方便呼叫

pattern = re.compile('\d:\d')

result1 = re.sub(pattern, '', content1)

result2 = re.sub(pattern, '', content2)

result3 = re.sub(pattern, '', content3)

print(result1, result2, result3)

正規表示式 學習小結

3個月沒看之前的 回過頭來一瞅,這還是自己寫的 嗎?一臉懵,尤其是正規表示式這種相對較為晦澀的語言,記錄一下曾經使用過的那些正規表示式。當時學習正則表達是主要是要提取一些非結構化文字中的資訊,期望將其能夠結構化,即提取需求字段。正規表示式的表示式全集以及常用正規表示式可參照該鏈結 目前見過最簡潔的正...

fei 正規表示式 正規表示式小結

常用的元字元常用的反義 常用的限定符 語法 說明 語法 說明 語法 說明 w 匹配字母或數字或下劃線或漢字 w匹配任意不是字母 數字 下劃線 漢字的字元 重複零次或者更多次 s匹配任意的空白字元 s匹配任意不是空白符的字元 重複一次或更多次 d匹配數字 d匹配任意非數字的字元 重複零次或一次 b匹配...

正規表示式小結

正規表示式 regex 英 red eks 1,d d d d或者是 d 表示匹配4位數的數字。2.說明。這些可被稱作元字元。匹配除換行符以外的任意字元1 jk2yh jj w數字字母漢字下劃線 bst456 5ghgtft s匹配任意的空白符 space table鍵和半全形空格 d匹配數字 di...