bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

python正則re模塊-創(chuàng)新互聯(lián)

歡×××陳師傅”

目前創(chuàng)新互聯(lián)建站已為成百上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)網(wǎng)站運(yùn)營(yíng)、企業(yè)網(wǎng)站設(shè)計(jì)、路橋網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

re正則處理

正則定義

正則表達(dá)式是對(duì)字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個(gè)“規(guī)則字符串”,這個(gè)“規(guī)則字符串”用來表達(dá)對(duì)字符串的一種過濾邏輯。

常用正則表達(dá)式的方法

  • re.compile(編譯)
  • pattern.match(從頭匹配)
  • pattern.search(匹配一個(gè))
  • pattern.findall(匹配所有)
  • pattern.sub(替換)

特殊字符集

特殊字符 解釋
.匹配除換行符之外的任何字符
^匹配字符串的開頭
$匹配字符串的結(jié)尾
*匹配前面的字符0次或更多次,盡可能多的重復(fù),ab*將匹配'a','ab'或者a后面加任意數(shù)量的b
+匹配前面的字符一次或更多次,ab+將匹配'ab'后加任意數(shù)量的b
?匹配前面的字符0次或一次,ab將匹配'a'或'ab'
*?,+?,??*,+,?都屬于貪婪匹配,就是盡可能多的匹配,而有時(shí)我們希望以最少的模式匹配,可以在限定符之后加?表示以最少的方式匹配
{m}匹配前一個(gè)字符至少m次
{m,n}匹配前一個(gè)字符最少m次,最多n次
{m,n}?以非貪婪模式匹配前一個(gè)字符,最少m次,最多n次,并以盡可能少的方式匹配
\轉(zhuǎn)義字符,將\后面的字符進(jìn)行轉(zhuǎn)義
[]表示一組字符,字符可以單個(gè)列出,也可以給定范圍,如[abc]表示a或b或c,[a-z]表示26個(gè)小寫字母中的任意一個(gè),[^a-z]匹配非小寫字母,[0-5][0-9]表示匹配00-59,特殊字符在[]也失去特殊意義,[(+ )]將匹配任何文字字符的'(',')','+',''
A丨B 匹配A或者B
()匹配括號(hào)內(nèi)的正則,每個(gè)括號(hào)都是一個(gè)組,從左往右的括號(hào),編號(hào)依次加一
\A匹配字符串的開頭
\b只用以匹配單詞的詞首和詞尾(退格符)
\B只在當(dāng)前位置不在單詞邊界時(shí)匹配。
\d匹配任何Unicode的十進(jìn)制數(shù)字,與[0-9]相同
D匹配任何非十進(jìn)制的字符,與[^0-9]相同
\s匹配Unicode的空白字符,匹配ascii字符集中包含空格的字符,相當(dāng)于[\t\n\r\f\v]
\S匹配不是空白字符的字符,相當(dāng)于[^\t\r\n\f\v]
\w匹配字母數(shù)字下劃線,相當(dāng)于[a-zA-Z0-9_]
\W匹配非字母數(shù)字下劃線,相當(dāng)于[^a-zA-Z0-9]
\Z僅匹配字符串結(jié)尾
(?P<name>)給分組加一個(gè)別名,(?P<a>)給分組取別名為a,每個(gè)組名只能在正則表達(dá)式中定義一次
(?P=name)引用前面別名為name的分組匹配到的任何文本
(?<=)前向界定,表示你要匹配的字符串前面是某個(gè)字符串的時(shí)候才匹配,('(?<=abc)def','abcdef')當(dāng)def前面是abc的時(shí)候才匹配
(?=)后向界定,表示你要匹配的字符串后面是某個(gè)字符串的時(shí)候才匹配,('abc(?=def)','abcdef')
(?<!)非前向界定,表示你要匹配的字符串前面不是某個(gè)字符串的時(shí)候才匹配,('(?<=abc)def','abcdef')當(dāng)def前面不是abc的時(shí)候才匹配
(?!)非后向界定,表示你要匹配的字符串后面不是某個(gè)字符串的時(shí)候才匹配,('abc(?=def)','abcdef')
(?(id/name)yes-patternno-pattern)

正則表達(dá)式方法

  • re.compile(pattern,flags=0)
    編譯一個(gè)正則表達(dá)式模式為正則表達(dá)式對(duì)象,其可用于使用他的匹配match(),search()以及其他方法

    >>> comp=re.compile(r'\d+')
    >>> ret=comp.match('123456')
    >>> ret.group()
    '123456'

    相當(dāng)于

    ret=re.match(r'\d+','123456')
  • re.search(pattern,string,flags = 0)
    查找正則表達(dá)式匹配到的第一個(gè)位置,并返回相應(yīng)的匹配對(duì)象

  • re.match(pattern,string,flags = 0)
    從字符串的開頭匹配,并返回相應(yīng)的匹配對(duì)象

  • re.fullmatch(pattern,string,flags = 0)
    將會(huì)對(duì)整個(gè)字符串進(jìn)行匹配,并返回相應(yīng)的匹配對(duì)象

  • re.split(pattern,string,maxsplit = 0,flags = 0)
    按照正則匹配模式進(jìn)行拆分字符串,maxsplit為最多拆分次數(shù),并且字符串的其余部分將作為列表的最后一個(gè)元素返回,如果分隔符中有捕獲組并且它在字符串的開頭或者結(jié)尾匹配,則結(jié)果將以空字符串開頭。
    >>> re.split(r'\W+','Words words wordS')
    ['Words', 'words', 'wordS']
    >>> re.split(r'\W+','Words words wordS',1)
    ['Words', 'words wordS']
    >>> re.split(r'\d+','1q2W3e4R',flags=re.IGNORECASE)
    ['', 'q', 'W', 'e', 'R']
    >>> re.split(r'(\W+)', 'words, words...')
    ['words', ', ', 'words', '...', '']
    >>> re.split(r'\W+', 'words, words...')
    ['words', 'words', '']
  • re.findall(pattern,string,flags=0)
    從左往右匹配,返回一個(gè)列表,如果模式中存在一個(gè)或多個(gè)組,則返回組列表; 如果模式有多個(gè)組,這將是一個(gè)元組列表。結(jié)果中包含空匹配。
    >>> re.findall(r'\d+','123,456')
    ['123', '456']
    >>> re.findall(r'(\d+)(\w+)','123qw,werrc')
    [('123', 'qw')]
    >>> re.findall(r'(\d+)|(\w+)','123qw,werrc')
    [('123', ''), ('', 'qw'), ('', 'werrc')]
  • re.finditer(pattern,string,flags = 0 )
    返回一個(gè)匹配到每個(gè)結(jié)果的迭代器
    >>> for i in re.finditer(r'\d+','123456'):
    print(i.group())
    123456
  • re.sub(pattern,repl,string,count = 0,flags = 0 )
    將匹配到的字符串替換成repl的值,count表示要替換的模式最多替換次數(shù),repl可以是一個(gè)字符串也可以是一個(gè)函數(shù),當(dāng)repl為字符串時(shí),會(huì)處理其中的任何反斜杠,,可以使用\id或\g< id>、\g< name>引用分組
    >>> re.sub(r'(\d+) (\w+)',r'\2 \1','12345 asdfd')
    'asdfd 12345'

    當(dāng)repl是一個(gè)函數(shù)時(shí),那么這個(gè)函數(shù)會(huì)只接受一個(gè)匹配對(duì)象參數(shù)。例如:

>>> def mat(m):
    if m.group(2)=='1234':
        return m.group(1)
    else:
        return '1234'

>>> re.sub(r'(\d+) (\d+)',mat,'123 1234qer')
'123qer'
>>> re.sub(r'(\d+) (\d+)',mat,'123 123qer')
'1234qer'
  • re.subn(pattern,repl,string,count = 0,flags = 0 )
    與sub執(zhí)行的操作相同,但是返回的是元組,元組最后一個(gè)元素為替換次數(shù)
    >>> def mat(m):
    if m.group(2)=='1234':
        return m.group(1)
    else:
        return '1234'
    >>> re.subn(r'(\d+) (\d+)',mat,'as123 1234qer')
    ('as123qer', 1)

    正則表達(dá)式對(duì)象

    使用re.compile可以編譯一個(gè)正則表達(dá)式對(duì)象

  • regex.search(string[,pos[endpos]])
    查找正則表達(dá)式匹配到的第一個(gè)位置,并返回相應(yīng)的匹配對(duì)象可選參數(shù)pos和endpos表示設(shè)置正則表達(dá)式匹配的字符串開始位置和結(jié)束位置
    >>> pattern=re.compile(r'\d+')
    >>> pattern.search('123456',2,5).group()                   
    '345'
  • regex.match(string,posendpos)
    如果字符串開頭的零個(gè)或多個(gè)字符與此正則表達(dá)式匹配,則返回相應(yīng)的匹配對(duì)象。pos和endpos用法和regex.search()意思相同
  • 編譯的正則表達(dá)式的方法和屬性與正則匹配的函數(shù)相同,這里不一一說明
    編譯對(duì)象的常用參數(shù)
  • re.A(re.ASCII)
    使\w,\W,\b,\B,\d,\D,\s和\S只匹配ASCII字符,而不匹配Unicode字符
  • re.I(re.IGNORECASE)
    匹配時(shí)不區(qū)分大小寫
  • re.L(re.LOCALE)'
    使\w \W \b \B \s \S \d \D和區(qū)分大小寫的匹配只取決于當(dāng)前的環(huán)境設(shè)定
  • re.M(re.MULTILINE)
    多行模式下,'^'和'$'由原來匹配字符串的開頭或者結(jié)尾變成匹配每行的開頭和結(jié)尾
  • re.S(re.DOTALL)
    使'.'匹配包含換行符的任何字符
  • re.X(re.VERBOSE)
    這個(gè)模式下正則表達(dá)式可以是多行,忽略空白字符,并可以加入注釋。以下兩個(gè)正則表達(dá)式是等價(jià)的
    a = re.compile(r"""\d +  # the integral part
                   \.    # the decimal point
                   \d *  # some fractional digits""", re.X)
    b = re.compile(r"\d+\.\d*")

match對(duì)象

  • match.group([ group1,... ] )
    返回匹配的一個(gè)或多個(gè)子組,如果只有一個(gè)參數(shù),則結(jié)果為單個(gè)字符串; 如果有多個(gè)參數(shù),則結(jié)果是一個(gè)元組,每個(gè)參數(shù)有一個(gè)項(xiàng)目。如果沒有參數(shù),group1默認(rèn)為零(返回整個(gè)匹配)。 如果groupN參數(shù)為零,則相應(yīng)的返回值是整個(gè)匹配的字符串
    >>> s=re.match(r'(\w+) (\w+)','hello world')
    >>> s.group(0)
    'hello world'
    >>> s.group(1)
    'hello'
    >>> s.group(2)
    'world'
    >>> s.group(1,0)
    ('hello', 'hello world')

    如果分組太多,我們可以對(duì)分組進(jìn)行命名

    >>> m=re.match(r"(?P<first>\w+) (?P<second>\w+)",'hello world')
    >>> m.group('first')
    'hello'
    >>> m.group('second')
    'world'

    如果一個(gè)組匹配多次,那么最終將返回的最后一次匹配到的字符串

    >>> m=re.match(r'(\d)+','123456')
    >>> m.group()
    '123456'
    >>> m.group(1)
    '6'
  • match. getitem(g)
    與m.group(g)相同,這樣使用會(huì)更簡(jiǎn)單
    >>> m=re.match(r'(\d)+','123456')
    >>> m[0]
    '123456'
    >>> m[1]
    '6'
  • match.groups(default=None)
    以元組的形式返回匹配到的所有子組,沒有被匹配到的分組,默認(rèn)為None,當(dāng)然可以設(shè)置默認(rèn)參數(shù)
    >>> m=re.match(r'(\d+),(\w+)?','1234,')
    >>> m.groups()
    ('1234', None)
    >>> m.groups('0')
    ('1234', '0')
  • match.groupdict(default=None)
    以字典的形式返回匹配到的值,字典的鍵為分組名,值為匹配到的字符串,沒有匹配到的分組將設(shè)置為None

    >>> m=re.match(r'(?P<first>\d+) (?P<second>\d+)','123 456')
    >>> m.groupdict()
    {'first': '123', 'second': '456'}
    >>> m=re.match(r'(\d+) (\d+)','123 456')
    >>> m.groupdict()
    {}
  • match.start([group]) 和match.end([group])
    分別返回由分組匹配到的字符串的開始和結(jié)束的索引,結(jié)束字符串的索引為最后一個(gè)子符的索引加一group默認(rèn)為零,將會(huì)表示所有匹配到的字符串
    >>> m=re.match(r'(\w+) (\w+) (\w+) (\w+)','my name is wanger')
    >>> m.start(2)                 
    3
    >>> m.end(2)                   
    7
    >>> m.end()                
    17
    >>> m.start()                  
    0
  • match.span[group]
    返回一個(gè)二元組,元組的元素為分組匹配到的字符串開始的索引和結(jié)束的索引,group默認(rèn)為0,表示匹配到的所有字符串
    >>> m=re.match(r'(\w+) (\w+) (\w+) (\w+)','my name is wanger')
    >>> m.span(2)                      
    (3, 7)
    >>> m.span()                   
    (0, 17)
  • match.pos 和match.endpos
    分別返回要匹配字符串的開始搜索的索引和結(jié)束搜索的索引
    >>> m=re.match(r'(\w+) (\w+) ','my name is wanger')
    >>> m.pos                  
    0
    >>> m.endpos                   
    17
  • match.lastindex
    最后匹配到的分組的索引
    >>> m=re.match(r'(\w+) (\w+) ','my name is wanger')
    >>> m.lastindex                
    2
    >>> m=re.match(r'(\w+) (\w+) (\w+)','my name is wanger')                       
    >>> m.lastindex                    
    3
  • match.lastgroup
    最后匹配到的分組的名稱,沒有命名組則返回空
    >>> m=re.match(r'(\w+) (?P<last>\w+) ','my name is wanger')                
    >>> m.lastgroup                
    'last'

幾個(gè)簡(jiǎn)單的實(shí)例

  1. 匹配前面是數(shù)字123的字符
    >>> re.search(r'(?<=123)\w+','123asd,wer').group(0) 'asd'

    2.匹配前面是數(shù)字后面是下劃線的字符

    >>> re.search(r'(?<=123)\w+(?=_)','123asd_123wer').group(0)                
    'asd'

    3.匹配手機(jī)號(hào)碼

    >>> re.match(r'1[3,5,7,8]\d{9}|','13573528479').group()                
    '13573528479'

    4.匹配電話號(hào)碼

    >>> re.match(r'\d{3}-\d{8}|\d{4}-\d{7}','0531-82866666').group()                   
    '0531-8286666'

    5.匹配IP地址

    >>> re.match(r'\d+\.\d+\.\d+\.\d+','192.168.10.25').group()                    
    '192.168.10.25'

    6.匹配網(wǎng)易郵箱

>>> re.findall(r'\w+@163\.com|\w+@126\.com','wanger@163.com wanger@126.com')

['wanger@163.com', 'wanger@126.com']

7.匹配HTML文本

>>> re.match(r'<(\w*)><(\w*)>.*</\2></\1>','<body><h3>wahaha5354</h3></body>').group()
'<body><h3>wahaha5354</h3></body>'

歡迎各位關(guān)注本人微信公眾號(hào)“沒有故事的陳師傅”

python正則re模塊

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)站名稱:python正則re模塊-創(chuàng)新互聯(lián)
瀏覽路徑:http://vcdvsql.cn/article20/cscojo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名手機(jī)網(wǎng)站建設(shè)網(wǎng)站營(yíng)銷響應(yīng)式網(wǎng)站企業(yè)網(wǎng)站制作ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名