常用語法表 語法
描述.
匹配任何字元,除了換行符
\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...