日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python import re_Python标准库笔记(2) — re模块

發布時間:2023/12/18 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python import re_Python标准库笔记(2) — re模块 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

re模塊提供了一系列功能強大的正則表達式(regular expression)工具,它們允許你快速檢查給定字符串是否與給定的模式匹配(match函數), 或者包含這個模式(search函數)。正則表達式是以緊湊(也很神秘)的語法寫出的字符串模式。

Python版本: 2.x

1、模塊方法

2、匹配語法

正則表達式適用于所有編程語言,并不是Python特有的,下面的語法介紹來自于這位博

主的歸納:

3、方法使用re.match(pattern, string, flags=0)

從字符串的開始匹配,如果pattern匹配到就返回一個Match對象實例(Match對象在后面描述),否則放回None。flags為匹配模式(會在下面描述),用于控制正則表達式的匹配方式。

import re

a = 'abcdefg'

print re.match(r'abc', a) # 匹配成功

print re.match(r'abc', a).group()

print re.match(r'cde', a) # 匹配失敗

>>><_sre.SRE_Match object at 0x0000000001D94578>

>>>abc

>>>None

search(pattern, string, flags=0)

用于查找字符串中可以匹配的子串,如果找到就返回對應的Match對象實例,否則返回None。它和math的區別是math只匹配開頭。

import re

a = 'abcdefg'

print re.search(r'bc', a)

print re.search(r'bc', a).group()

print re.search(r'123', a)

>>><_sre.SRE_Match object at 0x0000000001D94578>

>>>bc

>>>None

sub(pattern, repl, string, count=0, flags=0)

跟sub()函數一樣,只是它返回的是一個元組,包含新字符串和匹配到的次數。

import re

a = 'a1b2c3'

print re.subn(r'\d+', '0', a) # 將數字替換成'0'

>>>('a0b0c0', 3)

split(pattern, string, maxsplit=0, flags=0)

升級版的split(),用pattern匹配的子串來分割string,如果pattern里使用了圓括號,那么被pattern匹配到的串也將作為返回值列表的一部分,maxsplit為最多被分割的字符串個數。

import re

a = 'a1b2c'

print re.split(r'\d', a)

print re.split(r'(\d)', a)

>>>['a', 'b', 'c']

>>>['a', '1', 'b', '2', 'c']

findall(pattern, string, flags=0)

以列表的形式返回string里pattern匹配的子串。

import re

a = 'a1b2c3d4'

print re.findall('\d', a)

>>>['1', '2', '3', '4']

4、Match對象

re.match()、re.search()成功匹配的話都會返回一個Match對象,它包含了關于此次匹配的信息,可以使用Match提供的屬性或方法來獲取這些信息。例如:

import re

m = re.match(r'(\w+) (\w+)(?P.*)', 'hello world!')

print "m.string:", m.string

print "m.re:", m.re

print "m.pos:", m.pos

print "m.endpos:", m.endpos

print "m.lastindex:", m.lastindex

print "m.lastgroup:", m.lastgroup

print "m.group(1,2):", m.group(1, 2)

print "m.groups():", m.groups()

print "m.groupdict():", m.groupdict()

print "m.start(2):", m.start(2)

print "m.end(2):", m.end(2)

print "m.span(2):", m.span(2)

print r"m.expand(r'\2 \1\3'):", m.expand(r'\2 \1\3')

### output ###

# m.string: hello world!

# m.re: <_sre.SRE_Pattern object at 0x016E1A38>

# m.pos: 0

# m.endpos: 12

# m.lastindex: 3

# m.lastgroup: sign

# m.group(1,2): ('hello', 'world')

# m.groups(): ('hello', 'world', '!')

# m.groupdict(): {'sign': '!'}

# m.start(2): 6

# m.end(2): 11

# m.span(2): (6, 11)

# m.expand(r'\2 \1\3'): world hello!

5、Pattern對象

Pattern對象對象由re.compile()生成,它帶有許多re模塊的同名方法,而且方法用處也是一樣的。例如:

>>>import re

>>>pa = re.compile('(d\+)')

>>>print pa.split('he has 2 books and 1 pen')

['he has ', '2', ' books and ', '1', ' pen']

>>>print pa.findall('he has 2 books and 1 pen')

['2', '1']

>>>print pa.sub('much', 'he has 2 books and 1 pen')

he has much books and much pen

6、匹配模式

匹配模式取值可以使用按位或運算符'|'表示同時生效,比如re.I | re.M, 下面是常見的一些flag。re.I(re.IGNORECASE): 忽略大小寫

>>pa = re.compile('abc', re.I)

>>>pa.findall('AbCdEfG')

>>>['AbC']

re.L(re.LOCALE):字符集本地化

這個功能是為了支持多語言版本的字符集使用環境的,比如在轉義符\w,在英文環境下,它代表[a-zA-Z0-9],即所以英文字符和數字。如果在一個法語環境下使用,有些法語字符串便匹配不上。加上這L選項和就可以匹配了。不過這個對于中文環境沒有什么用,它仍然不能匹配中文字符。

re.M(re.MULTILINE): 多行模式,改變'^'和'$'的行為

>>>pa = re.compile('^\d+')

>>>pa.findall('123 456\n789 012\n345 678')

>>>['123']

>>>pa_m = re.compile('^\d+', re.M)

>>>pa_m.findall('123 456\n789 012\n345 678')

>>>['123', '789', '345']

re.S(re.DOTALL): 點任意匹配模式,改變'.'的行為

點號將匹配所有的字符。缺省情況下.匹配除換行符\n外的所有字符,使用這一選項以后,點號就能匹配包括換行符的任何字符。

re.U(re.UNICODE): 根據Unicode字符集解析字符

re.X(re.VERBOSE): 詳細模式

# 這個模式下正則表達式可以是多行,忽略空白字符,并可以加入注釋。以下兩個正則表達式是等價的

a = re.compile(r"""\d + # the integral part\. # the decimal point\d * # some fractional digits""", re.X)

b = re.compile(r"\d+\.\d*")

# 但是在這個模式下,如果你想匹配一個空格,你必須用'/ '的形式('/'后面跟一個空格)

總結

以上是生活随笔為你收集整理的python import re_Python标准库笔记(2) — re模块的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。