^在正則表達(dá)式中有兩個(gè)作用,一是表達(dá)以什么開(kāi)頭,二是表達(dá)對(duì)什么取反。有時(shí)候經(jīng)常傻傻的分不清楚,接下來(lái)給大家詳細(xì)介紹該怎么用這個(gè)^
準(zhǔn)備一個(gè)python文件test.py,借用re.search函數(shù)舉例說(shuō)明
# coding=utf-8import re
s = ['abc-123-cba',? ? ?#'abc'在最前面
????????'123-abc-aabbcc-123',? ? ?#'abc'在中間
????????'a-2-3-b-1',? ? #最前面是'a'
????????'b-x-c-a-1',? ? #最前面是'b'
????????'z-a-1',? ? #'a'在中間
????????'x-y-z',? ? #字符串沒(méi)有任何'a','b','c'
????????'cbaabc'? ?#字符串全是'a','b','c'組成
????????]
st = r'abc'foriin s:
? ? m = re.search(st, i)
? ? if m:
? ? ? ? print(i)
1.當(dāng)st = r'abc'時(shí),執(zhí)行python文件得到的結(jié)果如下
abc-123-cba
123-abc-aabbcc-123
cbaabc
字符串中有'abc'就匹配成功
2.當(dāng)st = r'[abc]'時(shí),執(zhí)行python文件得到的結(jié)果如下
abc-123-cba
123-abc-aabbcc-123
a-2-3-b-1
b-x-c-a-1
z-a-1
cbaabc
字符串中只要有'a'或'b'或'c',就匹配出來(lái)
3.當(dāng)st = r'^abc'時(shí),執(zhí)行python文件得到的結(jié)果如下
abc-123-cba
字符串中只有'abc'開(kāi)頭的才匹配出來(lái)
4.當(dāng)st = '^[abc]'時(shí),執(zhí)行python文件得到的結(jié)果如下
abc-123-cba
a-2-3-b-1
b-x-c-a-1
cbaabc
字符串由'a'或'b'或'c'開(kāi)頭的都匹配出來(lái)了
5.當(dāng)st = '[^abc]'時(shí),執(zhí)行python文件得到的結(jié)果如下
abc-123-cba
123-abc-aabbcc-123
a-2-3-b-1
b-x-c-a-1
z-a-1
x-y-z
字符串只要有除'a'和'b'和'c'的字符就都匹配出來(lái)了,這跟第三種情況是相反的
總結(jié):
'abc'表示字符串中有'abc'就匹配成功
'[abc]'表示字符串中有'a'或'b'或'c'就匹配成功
'^abc'表示字符串由'abc'開(kāi)頭就匹配成功
'^[abc]'表示字符串由'a'或'b'或'c'開(kāi)頭的,
'[^abc]'表示匹配'a','b','c'之外的字符。如果一個(gè)字符串是由'a','b','c'組合起來(lái)的,那就是假
當(dāng)^表示取反的時(shí)候,只有一種情況,就是在中括號(hào)里面,而且是每一個(gè)字符之外的。所以千萬(wàn)不要把'[^abc]'看成是對(duì)'abc'字符串的取反。
如果想使用對(duì)'abc'字符串取反,則只能更改代碼
st = r'abc'
for i in s:
m = re.search(st, i)
if not m
列舉常用的取反:
'[^a-z]' 所有小寫(xiě)字母之外的字符
'[^a-zA-Z]' 所有大寫(xiě)和小寫(xiě)字母之外的字符
'[^0-9]' 所有數(shù)字之外的字符
如果文章有錯(cuò)誤,還望您指正。