国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python筆記:第十一章正則表達(dá)式

這篇具有很好參考價值的文章主要介紹了python筆記:第十一章正則表達(dá)式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.模塊re

  • 以一定規(guī)則,快速檢索文本,或是實現(xiàn)一些替換操作
  • 默認(rèn)下,區(qū)分大小寫

2.常見的匹配字符表

字符 描述
\d 代表任意數(shù)字,就是阿拉伯?dāng)?shù)字 0-9 這些
\D 代表非數(shù)字的字符。與\d完全相反
\w 代表字母,數(shù)字,下劃線。也就是 a-z、A-Z、0-9、_
\W 跟 \w 相反 ,代表不是字母,不是數(shù)字,不是下劃線的字符。
\n 代表一個換行。
\r 代表一個回車。
\f 代表換頁。
\t 代表一個 Tab 。
\s 代表所有的空白字符,也就是上面這四個:\n、\r、\t、\f。
\S 跟 \s 相反,代表所有不是空白的字符。
\A 代表字符串的開始。
\Z 代表字符串的結(jié)束。
^ 匹配字符串開始的位置。
$ 匹配字符創(chuàng)結(jié)束的位置。
. 代表所有的單個字符,除了 \n \r
[...] 代表在 [] 范圍內(nèi)的字符,比如 [a-z] 就代表 a到z的字母
[^...] 跟 [...] 唱反調(diào),代表不在 [] 范圍內(nèi)的字符
{n} 匹配在 {n} 前面的東西,比如: o{2} 不能匹配 Bob 中的 o ,但是能匹配 food 中的兩個o。
{n,m} 匹配在 {n,m} 前面的東西,比如:o{1,3} 將匹配fooooood中的前三個o。
{n,} 匹配在 {n,} 前面的東西,比如:o{2,} 不能匹配“Bob”中的“o”,但能匹配fooooood中的所有o。
* 和 {0,} 一個樣,匹配 * 前面的 0 次或多次。 比如 zo* 能匹配“z”、“zo”以及“zoo”。
+ 和{1,} 一個樣,匹配 + 前面 1 次或多次。 比如 zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。
? 和{0,1} 一個樣,匹配 ?前面 0 次或 1 次。
a|b 匹配 a 或者 b。
() 匹配括號里面的內(nèi)容。
a = 'C|C++|C#|Python|Java'
# 判斷字符串 a 中是否含有 Python
print(a.index('Python')>-1)   #  True
print('Python' in a)   #  True

import re

re.findall('Python', a)  #  在字符串 a 中,找到所有的'Python'字符串
print(re.findall("Python", a))  #  ['Python']

2.1/d /D

import re
a = 'C0C++1C#2Python3Java'
# 檢索所有數(shù)字
r = re.findall('\d', a)  #  \d 匹配所有數(shù)字  元字符的一種
print(r)  # ['0', '1', '2', '3']

r = re.findall('\D', a)  #  \d 匹配所有非數(shù)字  元字符的一種
print(r)  # ['0', '1', '2', '3']
# ['C', 'C', '+', '+', 'C', '#', 'P', 'y', 't', 'h', 'o', 'n', 'J', 'a', 'v', 'a']

2.2[] 表示或

#  []  表示或
import re
s = 'abc, acc, adc, aec, afc, ahc'
r = re.findall('a[cf]c', s) # 匹配中間是 c 或 f 的字符串
print(r)  # ['acc', 'afc']

# [^]   表示否定
r = re.findall('a[^cf]c', s) # 匹配中間不是 c 和 f 的字符串
print(r)  # ['abc', 'adc', 'aec', 'ahc']

#  [c-f]   匹配c 到 f 的所有字符
r = re.findall('a[c-f]c', s) # 匹配 c 到 f 的字符
print(r)  # ['acc', 'adc', 'aec', 'afc']

2.3\w \W

# 概括字符集
# \w   \W
import re
a = 'C0C++\n1C# 2Python3*Java_'

r = re.findall('\w', a) # 匹配數(shù)字和字母  相當(dāng)于  [A-Za-z0-9_]
print(r)  
# ['C', '0', 'C', '1', 'C', '2', 'P', 'y', 't', 'h', 'o', 'n', '3', 'J', 'a', 'v', 'a', '_']

r = re.findall('\W', a)  # 非單詞字符  
print(r)  #  ['+', '+', '\n', '#', ' ', '*']

# \s  空白字符
r = re.findall('\s', a) 
print(r)  # ['\n', ' ']

2.4{} 表示匹配次數(shù)

# 數(shù)量詞  
#  {4}   4 表示每次匹配次數(shù) 
import re
a = 'python 11 java 22 php'
r = re.findall('[a-z]{3}', a)
print(r)  # ['pyt', 'hon', 'jav', 'php']

# {3, 6}  表示匹配次數(shù)在 3到6 之間
r = re.findall('[a-z]{3,6}', a)
print(r)  # ['python', 'java', 'php']

2.5貪婪 非貪婪

# 貪婪 非貪婪 
# python 默認(rèn)為貪婪模式  盡可能 多匹配 和 多次匹配
# 非貪婪模式  表達(dá)式后面加 ? 匹配最少的次數(shù)
r = re.findall('[a-z]{3,6}?', a)
print(r)  # ['pyt', 'hon', 'jav', 'php']

2.6* +

# * 匹配 0 次或者無限多次
a = 'pytho0python1pythonn2'
r = re.findall('python*', a) # 與 * 緊挨的字符n 匹配0次或是無限多次
print(r) # ['pytho', 'python', 'pythonn']

r = re.findall('pytho*', a) # 與 * 緊挨的字符n 匹配0次或是無限多次
print(r) # ['pytho', 'pytho', 'pytho']

r = re.findall('pythonn*', a) # 與 * 緊挨的字符n 匹配0次或是無限多次
print(r) # ['python', 'pythonn']

# + 匹配一次或無限多次
import re
r = re.findall('python+', a) # 與 * 緊挨的字符n 匹配1次或是無限多次
print(r) # ['python', 'pythonn']

# 不加 ?  
r = re.findall('python{1,2}', a) # 匹配n 出現(xiàn)一次到兩次
print(r) # ['python', 'pythonn']

# 加了 ?  
r = re.findall('python{1,2}?', a) # 匹配n 出現(xiàn)一次
print(r) # ['python', 'python']

2.7^ $ 邊界符

# 邊界匹配
import re
qq = '1000001'

r = re.findall('\d{4,8}', qq) # 匹配4 到8 位的QQ號
print(r)  # ['1000001']

qq = '10000000001'
r = re.findall('\d{4,8}', qq) # 匹配4 到8 位的QQ號
print(r)  # ['1000001']     沒有達(dá)到目的

# ^ $ 邊界符  
# ^ 規(guī)定以什么開始
# $ 規(guī)定以什么結(jié)束
r = re.findall('^\d{4,8}$', qq) # 匹配4 到8 位的QQ號
print(r)  # []   沒有匹配到

r = re.findall('^0000', qq) # 匹配從 0 開始的字符串
print(r)  # []   沒有匹配到

2.8() 分組

# ()  一個括號對應(yīng)一組
import re
a = 'pythonpythonpythonJs'

r = re.findall('(python){3}(JS)', a)
print(r)  # []

# re.I 不區(qū)分大小寫  第三個參數(shù)
r = re.findall('(python)(JS)', a, re.I)
print(r)  # [('python', 'Js')]

# 接受多個第三個參數(shù)時,用|隔開
r = re.findall('(python)(JS)', a, re.I | re.S)
print(r)  # [('python', 'Js')]

2.9. 匹配除換行符\n 以外的其他所有字符

# . 匹配出換行符\n 以外的其他所有字符
a = 'python\nCC'
r = re.findall('python.', a, re.I)
print(r)  # []   無法匹配\n

r = re.findall('python.', a, re.S)   #  讓 . 可以匹配換行符 
print(r)  # ['python\n']   

2.10re.sub 替換操作

# re.sub 替換操作
import re
language = 'PythonC#JavaC#PHPC#'
r = re.sub('C#', 'GO', language)
print(r)   # PythonGOJavaGOPHPGO

r = re.sub('C#', 'GO', language, 1)
print(r)   # PythonGOJavaC#PHPC#   只替換了一個

r = re.sub('C#', 'GO', language, 0)
print(r)   # PythonGOJavaGOPHPGO

# re.sub 的第二個參數(shù)可以是函數(shù)
def convert(value):
    pass
r = re.sub('C#', convert, language)
print(r)  # PythonJavaPHP


def conver(value):
    matched = value.group()
    return '!!' + matched + '!!'

r = re.sub('C#', convert, language)
print(r)   # Python!!C#!!PHP!!C#!!

2.11將函數(shù)作為參數(shù)

# 將函數(shù)作為參數(shù)
import re
s = 'ABC37978D432'

def convert(value):
    # 拿到具體數(shù)字
	matched = value.group()
	if matched >= 6:
        return 9
    else:
        return 0
    
r = re.sub('\d', convert, s)
print(r)  # ABC09999D000

2.12re.match re.search

# re.match
# re.search    
# 都返回類對象
import re
s = 'ABC37978D432'

r = re.match('\d', s)  #  從字符串的開始位置開始匹配,若不符,則返回None
print(r)  # None
r = re.search('\d', s) #  在字符串中尋找可以匹配的
print(r)  # <re.Match object; span=(3, 4), match='3'>
print(r.group())  # 3
print(r.span())   # (3, 4)   返回匹配的區(qū)間

2.13group 分組

# group 分組  
# group()   默認(rèn)值為 0   返回正則的完整匹配結(jié)果
import re
s = 'life is short, i use python'

r = re.search('life.*python', s)
print(r.group())  # life is short, i use python

# () 進(jìn)行分組
r = re.search('(life.*python)', s)
print(r.group(0))  # life is short, i use python

# group(1)
r = re.search('life(.*)python', s)
print(r.group(1))  #  is short, i use

r = re.findall('life(.*)python', s)
print(r)  #  is short, i use

s = 'life is short, i use python, i love python'
r = re.search('life(.*)python(.*)python', s)
print(r.group(0))  # life is short, i use python, i love python
print(r.group(1))  #  is short, i use
print(r.group(2))  # , i love
print(r.group(0,1,2)) # ('life is short, i use python, i love python', ' is short, i use ', ', i love ')
print(r.groups())  #  (' is short, i use ', ', i love ')

一些例子

正則表達(dá)式

import re

line = 'booooooooobbby123'
r = re.match(".*(b.*b).*", line)
print(r.group(1))       #貪婪模式下,檢索到最后符合的內(nèi)容
print(r.group(0))

r = re.match(".*?(b.*?b).*", line)      #對  ? 后面的 檢索進(jìn)行非貪婪模式
print(r.group(1))  

#  +
print('~+~~~~~~~~~')
r = re.match(".*(b.+b)", line)      #+ 前面內(nèi)容至少出現(xiàn)一次
print(r.group(1))  


print('|||||')
r = re.match(".*(bbb|bby123)", line)      #  | 或關(guān)系 存在一個即可
print(r.group(1))  

print('|||||')
r = re.match(".*(bby123|bbb)", line)      #  | 或關(guān)系 存在一個即可
print(r.group(1))

line2 = '15541861937'
regex_str = "(1[2345][0-9]{3})"
r = re.match(regex_str, line2)
print(r.group(0))

#漢字
print('[\u4E00-\u9FA5]+~~~~~~~~~~~~~~~~~~~~~')
line = '你好嗎'
r = re.match("[\u4E00-\u9FA5]+", line)
print(r.group(0))

print('[\u4E00-\u9FA5]+~~~~~~~~~~~~~~~~~~~~~')
line = '你  好嗎'
r = re.match("[\u4E00-\u9FA5]+", line)
print(r.group(0))

print('[\u4E00-\u9FA5]+~~~~~~~~~~~~~~~~~~~~~')
line = 'study in 北京大學(xué)'
r = re.match(".*([\u4E00-\u9FA5]+大學(xué))", line)
print(r.group(1))

print('[\u4E00-\u9FA5]+~~~~~~~~~~~~~~~~~~~~~')
line = 'study in 北京大學(xué)'
r = re.match(".*?([\u4E00-\u9FA5]+大學(xué))", line)
print(r.group(1))


line = 'XXX出生于2001年6月'
line = 'XXX出生于2001/6/1'
line = 'XXX出生于2001-6-1'
line = 'XXX出生于2001-06-01'
line = 'XXX出生于2001-06'

regex_str = ".*出生于(\d{4}[年/-]\d{1,2}([月/-]\d{1,2}|[月/-]$|$))"

文章來源地址http://www.zghlxwxcb.cn/news/detail-583252.html

到了這里,關(guān)于python筆記:第十一章正則表達(dá)式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Python學(xué)習(xí)筆記_基礎(chǔ)篇(八)_正則表達(dá)式

    Python學(xué)習(xí)筆記_基礎(chǔ)篇(八)_正則表達(dá)式

    1.1. 簡單介紹 正則表達(dá)式并不是Python的一部分。正則表達(dá)式是用于處理字符串的強(qiáng)大工具,擁有自己獨特的語法以及一個獨立的處理引擎,效率上可能不如str自帶的方法,但功能十分強(qiáng)大。得益于這一點,在提供了正則表達(dá)式的語言里,正則表達(dá)式的語法都是一樣的,區(qū)別只

    2024年02月12日
    瀏覽(112)
  • 【Linux命令行與Shell腳本編程】第十九章 正則表達(dá)式

    【Linux命令行與Shell腳本編程】第十九章 正則表達(dá)式

    正則表達(dá)式基礎(chǔ) 定義BRE模式 擴(kuò)展正則表達(dá)式 在sed和gawk中創(chuàng)建正則表達(dá)式,以得到所需的數(shù)據(jù)。 正則表達(dá)式是一種可供Linux工具過濾文本的自定義模板,使用元字符來描述數(shù)據(jù)流中的一個或多個字符. Linux工具(比如sed或gawk)會在讀取數(shù)據(jù)時使用正則表達(dá)式對數(shù)據(jù)進(jìn)行模式匹配

    2024年02月13日
    瀏覽(24)
  • Python學(xué)習(xí)筆記:正則表達(dá)式、邏輯運算符、lamda、二叉樹遍歷規(guī)則、類的判斷

    Python學(xué)習(xí)筆記:正則表達(dá)式、邏輯運算符、lamda、二叉樹遍歷規(guī)則、類的判斷

    序號 實例 說明 1 . 匹配任何字符(除換行符以外) 2 d 等效于[0-9],匹配數(shù)字 3 D 等效于[^0-9],匹配非數(shù)字 4 s 等效于[trnf],匹配空格字符 5 S 等效于[^trnf],匹配非空格字符 6 w 等效于[A-Za-z0-9],匹配單字字符 7 W 等效于[^A-Za-z0-9],匹配非單字字符 8 [ab]cdef 匹配acdef或bcd

    2024年02月11日
    瀏覽(60)
  • 學(xué)習(xí)筆記-正則表達(dá)式

    https://www.runoob.com/regexp/regexp-tutorial.html 正則表達(dá)式re(Regular Expression)是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為\\\"元字符\\\"),可以用來描述和匹配字符串的特定模式。 個人理解,re是對字符序列進(jìn)行建模,建立多對一映射,能夠覆蓋所有字符

    2024年02月09日
    瀏覽(23)
  • 正則表達(dá)式學(xué)習(xí)筆記

    正則表達(dá)式學(xué)習(xí)筆記

    字符 說明 將下一字符標(biāo)記為特殊字符、文本、反向引用或八進(jìn)制轉(zhuǎn)義符。 例如:“n\\\"匹配字符串\\\"n”。“n\\\"匹配換行符。序列”\\\\“匹配”“,”(“匹配”(\\\"。 ^ 匹配輸入字符串開始的位置。 如果設(shè)置了RegExp對象的Multiline屬性,^還會與\\\"n\\\"或\\\"r\\\"之后的位置匹配。 $ 匹配輸入

    2024年02月11日
    瀏覽(27)
  • 正則表達(dá)式筆記

    /你的正則表達(dá)式寫在這里/ 1?????????1出現(xiàn)0次或1次 1*????????1出現(xiàn)0次或多次 1+????????1出現(xiàn)1次或多次 1{2}????????1出現(xiàn)了2次 1{2,3}????????1出現(xiàn)了2到3次 1{2,}????????1出現(xiàn)了2次及以上 (5555){1}????????5555出現(xiàn)了1次 (dog|cat)? ? ? ? dog或者cat [a-zA-Z]? ?

    2024年02月10日
    瀏覽(14)
  • 學(xué)習(xí)筆記整理-正則表達(dá)式-01-認(rèn)識正則

    1. 什么是正則表達(dá)式 正則表達(dá)式(regular expression)描述了字符串\\\"構(gòu)成模式\\\",經(jīng)常被用于檢查字符串是否符合預(yù)定的格式要求。 用一個例子快速演示正則表達(dá)式基本使用方法: 檢查某個字符串是否是6位數(shù)字 /^d{6}$/ 就是正則表達(dá)式,它描述了字符串必須是\\\"6位數(shù)字\\\"的構(gòu)成規(guī)則。

    2024年02月12日
    瀏覽(31)
  • Python正則表達(dá)式之學(xué)習(xí)正則表達(dá)式三步曲

    ????????正則表達(dá)式描述了一種字符串匹配的模式,可以用來檢查一個串的有無某子串,或者做子串匹配替換,取出子串等操作。也可以說正則表達(dá)式就是字符串的匹配規(guī)則,也可以理解為是一種模糊匹配,匹配滿足正則條件的字符串。 ????????1、數(shù)據(jù)驗證(eg:表單驗

    2024年02月15日
    瀏覽(95)
  • QT筆記 - QRegularExpression正則表達(dá)式

    QRegularExpression是Qt框架中的正則表達(dá)式類,它支持Perl兼容的正則表達(dá)式語法。 以下是一些常用的正則表達(dá)式語法規(guī)則: 1. 字符匹配: ?? ?* 純字符串:直接寫入要匹配的字符串。例如,\\\"hello\\\"匹配字符串\\\"hello\\\"。 ?? ?* 轉(zhuǎn)義字符:使用反斜杠()來轉(zhuǎn)義特殊字符。例如,\\\"n\\\"匹配

    2024年01月23日
    瀏覽(18)
  • 機(jī)器學(xué)習(xí)與數(shù)據(jù)科學(xué)-專題1 Python正則表達(dá)式-【正則表達(dá)式入門-1】

    機(jī)器學(xué)習(xí)與數(shù)據(jù)科學(xué)-專題1 Python正則表達(dá)式-【正則表達(dá)式入門-1】

    為了完成本關(guān)任務(wù),你需要掌握: 在 Python 中使用正則表達(dá)式; 最基礎(chǔ)正則表達(dá)式; 正則匹配函數(shù)。 在 Python 中使用正則表達(dá)式 正可謂人生苦短,我用 Python。Python 有個特點就是庫非常多,自然擁有正則匹配這種常見的庫,并且此庫已經(jīng)嵌入在 Python 標(biāo)準(zhǔn)庫中,使用起來非常

    2024年01月22日
    瀏覽(109)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包