其中數(shù)字、字符串、元組是不可變的,列表、字典是可變的。
對(duì)不可變類(lèi)型的變量重新賦值,實(shí)際上是重新創(chuàng)建一個(gè)不可變類(lèi)型的對(duì)象,并將原來(lái)的變量重新指向新創(chuàng)建的對(duì)象(如果沒(méi)有其他變量引用原有對(duì)象的話(即引用計(jì)數(shù)為0),原有對(duì)象就會(huì)被回收)。
使用bin(i),oct(i),hex(i)函數(shù)可以將十進(jìn)制數(shù)分別轉(zhuǎn)換為二進(jìn)制,八進(jìn)制,十六進(jìn)制
>>> s=10
>>> bin(s)
'0b1010'
>>> oct(s)
'0o12'
>>> hex(s)
'0xa'
使用int(str,base)可以將非十進(jìn)制的數(shù)轉(zhuǎn)換成整數(shù)
,其中str是文本形式的數(shù)字,base可以為2,8,16數(shù)字,分別代表二進(jìn)制,八進(jìn)制,十六進(jìn)制,最高到36位,最低為2
>>> int('0b10010',2)
18
>>> int('0o52415',8)
21773
>>> int('0x134ab',16)
79019
>>> int('s',32)
28
>>> int('yz',36)
1259
當(dāng)然也可以進(jìn)行16進(jìn)制轉(zhuǎn)二進(jìn)制八進(jìn)制,八進(jìn)制可以轉(zhuǎn)其他進(jìn)制
>>> hex(0b1001)
'0x9'
>>> hex(0o1234)
'0x29c'
>>> oct(0b101)
'0o5'
>>> oct(0xff)
'0o377'
>>> bin(0xff)
'0b11111111'
>>> bin(0o7777)
'0b111111111111'
>>> a=12
>>> f=~a
>>> f
-13
>>> bin(f)
'-0b1101'
>>> bin(a)
'0b1100'
>>> bin(a<<1)
'0b11000'
>>> bin(a>>1)
'0b110'
>>> list=[1,2,3,4,5]
>>> a=3
>>> print (a in list)
True
>>> print (a not in list)
False
>>> a=['1,2,3,4,5']
>>> b=a
>>> print (b is a )
True
>>> print (b is not a )
False
>>> b=a[:]
>>> print (b is a) #這是因?yàn)樽址遣豢勺兊?False
>>> print (id(a))
42473480
>>> print (id(b))
42485000
>>> pow(2,3)
8
>>> import math
>>> math.sqrt(4)
2.0
>>>max(2,3,4,5,1,9,6)
9
>>> min(2,3,4,5,1,9,6)
1
>>> abs(-1)
1
>>> math.fabs(-1)
1.0
>>> round(3.5)
4
>>> round(2.5)
2
>>> round(2.54)
3
>>> round(2.45)
2
>>> math.ceil(1.7)
2
>>> math.ceil(1.3)
2
>>> math.floor(1.7)
1
>>> math.floor(1.3)
1
>>> cmp(1,2)
-1
>>> cmp(1,1)
0
>>> cmp(2,1)
1
>>> import random
>>> random.random()
0.18001643527271916
??????- 取自定義數(shù)里的隨機(jī)數(shù):(可以取多個(gè)元素)
>>> random.choice([1,2,3,4,5])
2
>>> random.choice([1,2,3,4,5])
3
>>> random.sample([1,2,3,4,5,6,7,8,9],2)
[3, 7]
>>> random.sample([1,2,3,4,5,6,7,8,9],3)
[4, 9, 3]
??????- 隨機(jī)打亂順序:
>>> a=[1,2,3,4,5,8]
>>> random.shuffle(a)
>>> a
[1, 8, 2, 3, 4, 5]
??????- 獲取N位隨機(jī)數(shù):(二進(jìn)制)
>>> random.getrandbits(6)
55
>>> random.getrandbits(6)
48
>>> random.getrandbits(7)
104
>>> math.modf(1.4)
(0.3999999999999999, 1.0)
>>> math.modf(1.5)
(0.5, 1.0)
>>> math.modf(2.8)
(0.7999999999999998, 2.0)
>>> math.modf(3.1)
(0.10000000000000009, 3.0)
>>> math.log(4,2)
2.0
>>> math.log2(4)
2.0
>>> math.log10(100)
2.0
>>> math.log(100,10)
2.0
>>> s=format(2.345,'0.2f')
>>> s
>>> type (s)
>>> round(2.5)
2
>>> format(2.5,'0.0f')
'2'
>>> a=4.2
>>> b=2.1
>>> a+b
6.300000000000001
>>> from decimal import Decimal
>>> a=Decimal('2.1')
>>> b=Decimal('4.2')
>>> a+b
Decimal('6.3')
>>> a=20
>>> bin(a)
'0b10100'
>>> oct(a)
'0o24'
>>> hex(a)
'0x14'
>>> format(a,'b')
'10100'
>>> format(a,'o')
'24'
>>> format(a,'x')
'14'
字符串(python2默認(rèn)使用ascii編碼,使用Unicode編碼須在字符串前加u,python3使用unicode編碼)
a='str'
a=u'str'
Raw字符串:r"C:\user\administrator"(無(wú)法進(jìn)行轉(zhuǎn)義操作)
>>> 'abc'+'def'
'abcdef'
>>> 'hello' *5
'hellohellohellohellohello'
>>> print ('-'*50)
--------------------------------------------------
>>> "aa""bb"
'aabb'
>>> 'ab''cd'
'abcd'
a="text"
>>> for c in a:
... print (c,end='')
...
text
>>> for c in a:
... print (c,end='-')
...
t-e-x-t-
>>> 'x' in a
True
>>> text='this_is_str'
>>> text[0:4]
'this'
>>> text[5:7]
'is'
>>> text[:4]
'this'
>>> text[-3:]
'str'
>>> text[-12:-7]
'this'
>>> text[::2]
'ti_***'
>>> text[8:1:-2]
'ss_i'
>>> ord('d')
100
>>> chr(99)
'c'
>>> ord('王')
29579
>>> chr(29579)
'王'
>>> Text="" #初始化Text
>>> text="aSdFgHjK"
>>> for i in text:
... i_code=ord(i)
... if 97<=i_code and i_code<=122:
... Text+=chr(i_code-32)
... else:
... Text+=i
...
>>> Text
'ASDFGHJK'
>>> for x in text:
... x_code=ord(x)
... if 65<=x_code and x_code<=90:
... Text+=chr(x_code+32)
... else:
... Text+=x
...
>>> Text
'ASDFGHJKasdfghjk'
>>> str='asdFGHzxcVBN'
>>> str.replace('asd','ASD')
'ASDFGHzxcVBN'
ascii編碼對(duì)照表 二進(jìn)制 |
十進(jìn)制 | 十六進(jìn)制 | 圖形 |
---|---|---|---|
0010 0000 | 32 | 20 | (空格) |
0010 0001 | 33 | 21 | ! |
0010 0010 | 34 | 22 | " |
0010 0011 | 35 | 23 | # |
0010 0100 | 36 | 24 | $ |
0010 0101 | 37 | 25 | % |
0010 0110 | 38 | 26 | & |
0010 0111 | 39 | 27 | '' |
0010 1000 | 40 | 28 | ( |
0010 1001 | 41 | 29 | ) |
0010 1010 | 42 | 2A | * |
0010 1011 | 43 | 2B | + |
0010 1100 | 44 | 2C | , |
0010 1101 | 45 | 2D | - |
0010 1110 | 46 | 2E | . |
0010 1111 | 47 | 2F | / |
0011 0000 | 48 | 30 | 0 |
0011 0001 | 49 | 31 | 1 |
0011 0010 | 50 | 32 | 2 |
0011 0011 | 51 | 33 | 3 |
0011 0100 | 52 | 34 | 4 |
0011 0101 | 53 | 35 | 5 |
0011 0110 | 54 | 36 | 6 |
0011 0111 | 55 | 37 | 7 |
0011 1000 | 56 | 38 | 8 |
0011 1001 | 57 | 39 | 9 |
0011 1010 | 58 | 3A | : |
0011 1011 | 59 | 3B | ; |
0011 1100 | 60 | 3C | < |
0011 1101 | 61 | 3D | = |
0011 1110 | 62 | 3E | > |
0011 1111 | 63 | 3F | ? |
0100 0000 | 64 | 40 | @ |
0100 0001 | 65 | 41 | A |
0100 0010 | 66 | 42 | B |
0100 0011 | 67 | 43 | C |
0100 0100 | 68 | 44 | D |
0100 0101 | 69 | 45 | E |
0100 0110 | 70 | 46 | F |
0100 0111 | 71 | 47 | G |
0100 1000 | 72 | 48 | H |
0100 1001 | 73 | 49 | I |
0100 1010 | 74 | 4A | J |
0100 1011 | 75 | 4B | K |
0100 1100 | 76 | 4C | L |
0100 1101 | 77 | 4D | M |
0100 1110 | 78 | 4E | N |
0100 1111 | 79 | 4F | O |
0101 0000 | 80 | 50 | P |
0101 0001 | 81 | 51 | Q |
0101 0010 | 82 | 52 | R |
0101 0011 | 83 | 53 | S |
0101 0100 | 84 | 54 | T |
0101 0101 | 85 | 55 | U |
0101 0110 | 86 | 56 | V |
0101 0111 | 87 | 57 | W |
0101 1000 | 88 | 58 | X |
0101 1001 | 89 | 59 | Y |
0101 1010 | 90 | 5A | Z |
0101 1011 | 91 | 5B | [ |
0101 1100 | 92 | 5C | \ |
0101 1101 | 93 | 5D | ] |
0101 1110 | 94 | 5E | ^ |
0101 1111 | 95 | 5F | _ |
0110 0000 | 96 | 60 | ` |
0110 0001 | 97 | 61 | a |
0110 0010 | 98 | 62 | b |
0110 0011 | 99 | 63 | c |
0110 0100 | 100 | 64 | d |
0110 0101 | 101 | 65 | e |
0110 0110 | 102 | 66 | f |
0110 0111 | 103 | 67 | g |
0110 1000 | 104 | 68 | h |
0110 1001 | 105 | 69 | i |
0110 1010 | 106 | 6A | j |
0110 1011 | 107 | 6B | k |
0110 1100 | 108 | 6C | l |
0110 1101 | 109 | 6D | m |
0110 1110 | 110 | 6E | n |
0110 1111 | 111 | 6F | o |
0111 0000 | 112 | 70 | p |
0111 0001 | 113 | 71 | q |
0111 0010 | 114 | 72 | r |
0111 0011 | 115 | 73 | s |
0111 0100 | 116 | 74 | t |
0111 0101 | 117 | 75 | u |
0111 0110 | 118 | 76 | v |
0111 0111 | 119 | 77 | w |
0111 1000 | 120 | 78 | x |
0111 1001 | 121 | 79 | y |
0111 1010 | 122 | 7A | z |
0111 1011 | 123 | 7B | { |
0111 1100 | 124 | 7C | \ |
0111 1101 | 125 | 7D | } |
0111 1110 | 126 | 7E | ~ |
>>> str='hello world'
>>> str.capitalize()
'Hello world'
>>> str.title()
'Hello World'
>>> str.upper()
'HELLO WORLD'
>>> str.lower()
'hello world'
>>> str='HellO wORld'
>>> str.swapcase()
'hELLo WorLD'
>>> str='hello'
>>> str.center(11)
' helloo '
>>> str.center(11,'_')
'___helloo__'
>>> str.ljust(11,'_')
'helloo_____'
>>> str.ljust(11)
'helloo
>>> str.rjust(11)
' hello'
>>> str.rjust(11,'_')
'_____hello'
>>> str='hello\tworld'
>>> print (str)
hello world
>>> str.expandtabs(9)
'hello world'
>>> str.expandtabs(4)
'hello world'
>>> str.zfill(20)
'000000000hello\tworld'
>>> 'sad'.zfill(10)
'0000000sad'
>>> str=' hello world '
>>> str.strip()
'hello world'
>>> str.lstrip()
'hello world '
>>> str.rstrip()
' hello world'
>>> str='hello,world'
>>> str.strip('h')
'ello,world'
>>> str.strip('[held]')
'o,wor'
>>> str='hello,world'
>>> str.startswith('hello')
True
>>> str.startswith('hello',0,5)
True
>>> str.startswith('hello',1,5)
False
>>> str.endswith('rld',8)
True
>>> str.endswith('rld',9)
False
>>> str.endswith('rld',8,11)
True
>>> str='hello,world'
>>> str.count('l')
3
>>> str.count('ll')
1
str='hello,world'
>>> str.find('l')
2
>>> str.rfind('l')
9
>>> str.index('l')
2
>>> str.rindex('l')
9
>>> str.index('a')
Traceback (most recent call last):
File "", line 1, in
ValueError: substring not found
>>> str.find('a')
>>> str.replace('l','L')
'heLLo,worLd'
>>> str.replace('l','L',1)
'heLlo,world'
isdigit、isdecimal、isnumeric三者的區(qū)別
isdigit()
True: Unicode數(shù)字,byte數(shù)字(單字節(jié)),全角數(shù)字(雙字節(jié)),羅馬數(shù)字
False: 漢字?jǐn)?shù)字
Error: 無(wú)isdecimal()
True: Unicode數(shù)字,,全角數(shù)字(雙字節(jié))
False: 羅馬數(shù)字,漢字?jǐn)?shù)字
Error: byte數(shù)字(單字節(jié))isnumeric()
True: Unicode數(shù)字,全角數(shù)字(雙字節(jié)),羅馬數(shù)字,漢字?jǐn)?shù)字
False: 無(wú)
Error: byte數(shù)字(單字節(jié))字符串分隔
- split([sep[,maxsplit]])/rsplit([sep[,maxsplit]]):分別從左右按照sep字符串分隔,最多分隔maxsplit此,默認(rèn)無(wú)數(shù)次
>> str='asd,fgh,jkl' >> str.split(',') ['asd', 'fgh', 'jkl'] >> str.rsplit(',',1) ['asd,fgh', 'jkl']
- splitlines()以\n或者\(yùn)r或者\(yùn)n\r分隔
>> str='asd\nfgh\njkl' >> str.splitlines() ['asd', 'fgh', 'jkl']
- partition(sep):將分隔符也作為一個(gè)元素列出來(lái)
>> 'http://www.baidu.com'.partition('://') ('http', '://', 'www.baidu.com')
字符串其他方法
- join():以特定的分隔符將字符串分隔
>> str='asdfg' >> '-'.join(str) 'a-s-d-f-g'
python字符串格式化輸出的三種方式
這種格式化表達(dá)式類(lèi)似于C語(yǔ)言
格式化操作符(%) | 說(shuō)明 |
---|---|
s | 獲取傳入對(duì)象的str方法的返回值,并將其格式化到指定位置 |
r | 與s一樣,但輸出方式是repr方式,而不是str |
c | 整數(shù):將數(shù)字轉(zhuǎn)換成其unicode對(duì)應(yīng)的值,10進(jìn)制范圍為 0<=i<=1114111(py27則只支持0-255);字符:將字符添加到指定位置 |
d | 有符號(hào)十進(jìn)制(整數(shù)),將整數(shù)、浮點(diǎn)數(shù)轉(zhuǎn)換成十 進(jìn)制表示,并將其格式化到指定位置 |
i | 有符號(hào)整數(shù) |
u | 無(wú)符號(hào)整數(shù) |
o | 將整數(shù)轉(zhuǎn)換成八 進(jìn)制表示,并將其格式化到指定位置 |
x | 將整數(shù)轉(zhuǎn)換成十六進(jìn)制表示,并將其格式化到指定位置 |
X | 與x一樣,A-F是大寫(xiě) |
e | 浮點(diǎn)指數(shù),將整數(shù)、浮點(diǎn)數(shù)轉(zhuǎn)換成科學(xué)計(jì)數(shù)法,并將其格式化到指定位置(小寫(xiě)e) |
E | 與e一樣,E為大寫(xiě) |
f | 將整數(shù)、浮點(diǎn)數(shù)轉(zhuǎn)換成浮點(diǎn)數(shù)表示,并將其格式化到指定位置(默認(rèn)保留小數(shù)點(diǎn)后6位) |
F | 浮點(diǎn)數(shù)十進(jìn)制 |
g | 浮點(diǎn)e或f,自動(dòng)調(diào)整將整數(shù)、浮點(diǎn)數(shù)轉(zhuǎn)換成 浮點(diǎn)型或科學(xué)計(jì)數(shù)法表示 |
G | 浮點(diǎn)E或F,自動(dòng)調(diào)整將整數(shù)、浮點(diǎn)數(shù)轉(zhuǎn)換成 浮點(diǎn)型或科學(xué)計(jì)數(shù)法表示 |
% | 當(dāng)字符串中存在格式化標(biāo)志時(shí),需要用 %%表示一個(gè)百分號(hào) |
注:Python中百分號(hào)格式化是不存在自動(dòng)將整數(shù)轉(zhuǎn)換成二進(jìn)制表示的方式
舉例
>>> "%s|%r|%c" %("this is str","this is repr","C")
"this is str|'this is repr'|C"
>>> "%d|%i|%o|%x|%X|" %(3,5,12,13,14)
'3|5|14|d|E|'
>>> "%e|%E|%f|%F|%g|%G" %(1.5E3,1.5e3,13.5,13.5,1.5e13,13.5E15)
'1.500000e+03|1.500000E+03|13.500000|13.500000|1.5e+13|1.35E+16'
>>> "%(string)-10s"%({'string':'1'})
'1
>>> "%(float)+10.2F"%({'float':3.1})
' +3.10'
>>> "%(float)-10.2f"%({'float':3.1})
'3.10 '
語(yǔ)法:{}.format(value)
參數(shù):
(value):可以是整數(shù),浮點(diǎn)數(shù),字符串,字符甚至變量。
Returntype:返回一個(gè)格式化字符串,其值在占位符位置作為參數(shù)傳遞。
#位置參數(shù)
>>> username='wanger'
>>> password=123456
>>> print ("{}'s password is {}".format(username,password))
wanger's password is 123456
>>> username='wanger'
>>> password=123456
>>> print ("{1}'s password is {0}".format(password,username))
wanger's password is 123456
#下標(biāo)參數(shù)
>>> si=['KB','MB','GB','TB','PB','EB','ZB','YB']
>>> '1000{0[0]}=1{0[1]}'.format(si)
'1000KB=1MB'
#浮點(diǎn)數(shù)精度
>>> '{:.4f}'.format(3.1415926)
'3.1416'
>>> '{:>10.4f}'.format(3.1415926)
' 3.1416'
>>> 'this is a test {t[0]}'.format(t='hello')
'this is a test h'
>>> 'this is a test {t[1]}'.format(t='hello')
'this is a test e'
#使用模塊作為參數(shù)
>>> import sys
>>> sys.platform
'win32'
>>> "{0.platform}".format(sys)
'win32'
>>> 'my laptop platform is {s}'.format(s=sys.platform)
'my laptop platform is win32'
>>> 'my laptop platform is (s.platform)'.format(s=sys)
'my laptop platform is (s.platform)'
#關(guān)鍵字參數(shù)
>>> 'my name is {name} ,age is {age}'.format(name='wanger',age='25')
'my name is wanger ,age is 25
當(dāng)占位符{}為空時(shí),Python將按順序替換通過(guò)str.format()傳遞的值。
str.format()方法中存在的值本質(zhì)上是元組數(shù)據(jù)類(lèi)型,元組中包含的每個(gè)單獨(dú)值都可以通過(guò)索引號(hào)調(diào)用,索引號(hào)以索引號(hào)0開(kāi)頭。
第三段代碼的變量si是一個(gè)列表,{0}就代表format()方法的第一個(gè)參數(shù),那么{0[0]}就代表列表的第一個(gè)元素,{0[1]}就代表列表的第二個(gè)元素
這個(gè)例子說(shuō)明格式說(shuō)明符可以通過(guò)利用(類(lèi)似) Python 的語(yǔ)法
訪問(wèn)到對(duì)象的元素或?qū)傩浴_@就叫做復(fù)合字段名 (compound field names) 。
以下復(fù)合字段名都是“ 有效的 ” 。
? 使用列表作為參數(shù),并且通過(guò)下標(biāo)索引來(lái)訪問(wèn)其元素(跟上
一例類(lèi)似)
? 使用字典作為參數(shù),并且通過(guò)鍵來(lái)訪問(wèn)其值
? 使用模塊作為參數(shù),并且通過(guò)名字來(lái)訪問(wèn)其變量及函數(shù)
? 使用類(lèi)的實(shí)例作為參數(shù),并且通過(guò)名字來(lái)訪問(wèn)其方法和屬性
? 以上方法的任意組合
表達(dá)式:format_spec ::= [[fill]align][sign][#][0][width][,][.precision][type]
fill和align以及后面的width相當(dāng)于str方法中的center,ljust,rjust
>>> '{:+^15}'.format('start')
'+++++start+++++'
>>> '{:+^15}'.format('end')
'++++++end++++++'
>>> '{:*<15}'.format('end')
'end************'
>>> '{:*>15}'.format('start')
'**********start'
>>> '{:=+20}'.format(10)
'+ 10'
>>> print("{:=10}\n{:=+20}\n{:-^10}\n{:=-13}".format(10,10,'-',-15))
10
+ 10
----------
- 15
>>> "{0:8b},{0:8o},{0:8x}".format(10)
' 1010, 12, a'
>>> "{0:b},{0:o},{0:x}".format(10)
'1010,12,a'
>>> ("{0:#8b},{0:#8o},{0:#8x}".format(10))
' 0b1010, 0o12, 0xa'
>>> '{:,}'.format(100000000000)
'100,000,000,000'
>>> '{:010.5}'.format(3.1415926)
'00003.1416'
>>> "{0:d},{0:b},{0:o},{0:x},{0:X}".format(10)
'10,1010,12,a,A'
??????- 為浮點(diǎn)數(shù)時(shí):e和E是指數(shù),f和F是浮點(diǎn)數(shù)。g和G是同一的,也可以使用n來(lái)代替g, %是顯示百分比
>>> "{0:e},{0:F},{0:g},{0:n},{0:%}".format(10.3)
'1.030000e+01,10.300000,10.3,10.3,1030.000000%'
f-strings也稱(chēng)為“格式化字符串文字”,f字符串是f在開(kāi)頭有一個(gè)字符串文字,其中以 {} 包含的表達(dá)式會(huì)進(jìn)行值替換。表達(dá)式在運(yùn)行時(shí)進(jìn)行評(píng)估,然后使用format協(xié)議進(jìn)行格式化。其中以 {} 包含的表達(dá)式會(huì)進(jìn)行值替換。
簡(jiǎn)單舉例
>>> name='wanger'
>>> age=25
>>> f"hello,I'm {name},my age {age} "
"hello,I'm wanger,my age 25 "
#也可以使用大寫(xiě)F
>>> F"hello, I'm {name},my age {age} "
"hello, I'm wanger,my age 25 "
當(dāng)然也可以進(jìn)行簡(jiǎn)單的計(jì)算
>>> f"{2*3}"
'6'
也可以調(diào)用函數(shù)
>>> def test(input):
... return input.lower()
...
>>> name='WangEr'
>>> f"{test(name)} is funny"
'wanger is funny'
還可以選擇直接調(diào)用方法
>>> name='WangEr'
>>> f"{name.lower()} is funny"
'wanger is funny'
在使用字典的時(shí)候。如果要為字典的鍵使用單引號(hào),請(qǐng)記住確保對(duì)包含鍵的f字符串使用雙引號(hào)。
comedian = {'name': 'wanger', 'age': 25}
f"The comedian is {comedian['name']}, aged {comedian['age']}."
'The comedian is wanger, aged 25.'
使用多個(gè)界定符分隔字符串
split只能使用單一字符串,如果要使用多個(gè)分隔符的話,就要用到正則表達(dá)式模塊了
>>> str='asd,dfg;zxc ert uio'
>>> import re
>>> re.split(r'[;,\s]\s*',str)
['asd', 'dfg', 'zxc', 'ert', 'uio']
[]表示里面字符任意匹配。[;, ]表示;或者,或者空格,\s*表示任意個(gè)前面字符
>>> url='http://www.baidu.com'
>>> ftp='ftp://www.baidu.com'
>>> url.startswith(('http://','ftp://'))
True
>>> txt='ziyuan.txt'
>>> txt.endswith('txt')
True
>>> url[0:7]=="http://" or url[0:6]=="ftp://"
True
>>> txt[7:10]=="txt"
True
>>> from fnmatch import fnmatch,fnmatchcase
>>> fnmatch('log.txt','*.txt')
True
>>> fnmatch('log.TXT','*.txt')
True
>>> fnmatchcase('log.TXT','*.txt')
False
>>> fnmatchcase('log.TXT','*.TXT')
True
匹配和搜索特定格式的文本
普通匹配可以使用find方法,如果是特定格式的話還是會(huì)用到正則模塊
>>> date1='2018/10/24'
>>> date2='2018/12/21'
>>> date3='2018-12-05'
>>> def isdate(date):
... if re.match(r'\d+/\d+/\d+',date):
... print ('match OK')
... else:
... print ('not match')
>>> isdate(date1)
match OK
>>> isdate(date2)
match OK
>>> isdate(date3)
not match
在正則模塊re中\(zhòng)d表示單個(gè)數(shù)字,+表示一個(gè)或多個(gè)前面的字段
搜索和替換特定的文本格式
普通的匹配可以使用replace方法,如果匹配特定格式,還是要用正則模塊re
>>> import re
>>> date='today is 13/12/2018'
>>> re.sub(r'(\d+)/(\d+)/(\d+)',r'\3,-\2-\1',date)
'today is 2018-12-13'
>>> datepat=re.compile(r'(\d+)/(\d+)/(\d+)') #為了防止每次都要定義匹配模式,可以在這里定義一個(gè)匹配的變量,以后匹配直接調(diào)用這個(gè)變量
>>> datepat.sub(r'\3,-\2-\1',date)
'today is 2018-12-13'
>>> date='yestory is 12/12/2018,today is 13/12/2018'
>>> datepat.subn(r'\3,-\2-\1',date)
('yestory is 2018-12-12,today is 2018-12-13', 2)
\1,\2,\3分別代表前面匹配模式中的第一個(gè)括號(hào)匹配到的,第二個(gè)括號(hào)匹配到的,第三個(gè)括號(hào)匹配到的,使用subn方法可以看到匹配到幾次
忽略大小寫(xiě)的搜索替換
如果要忽略大小寫(xiě)還是要用到re模塊,需要用到的是re的IGNORECASE方法
>>> import re
>>> re.findall('replace','Replace,replace,REPLACE')
['replace']
>>> re.findall('replace','Replace,replace,REPLACE',flags=re.IGNORECASE)
['Replace', 'replace', 'REPLACE']
>>> str='Replace is the same as REPLACE'
>>> re.sub('replace','WORD',str,flags=re.IGNORECASE)
'WORD is the same as WORD'
>>> strpat=re.compile(r'\"(.*)\"')
>>> text='this is my "name"'
>>> strpat.findall(text)
['name']
>>> text='this is my "name" and this is my "age"'
>>> strpat.findall(text)
['name" and this is my "age']
>>> strpat=re.compile(r'\"(.*?)"')
>>> strpat.findall(text)
['name', 'age']
歡迎各位關(guān)注本人微信公眾號(hào),“沒(méi)有故事的陳師傅”
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+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ì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。