^在正則表達式中有兩個作用,一是表達以什么開頭,二是表達對什么取反。有時候經常傻傻的分不清楚,接下來給大家詳細介紹該怎么用這個^
准備一個python文件test.py,借用re.search函數舉例說明
# coding=utf-8 import 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', #字符串沒有任何'a','b','c' 'cbaabc' #字符串全是'a','b','c'組成 ] st = r'abc' for i in s: m = re.search(st, i) if m: print(i)
1.當st = r'abc'時,執行python文件得到的結果如下
abc-123-cba
123-abc-aabbcc-123
cbaabc
字符串中有'abc'就匹配成功
2.當st = r'[abc]'時,執行python文件得到的結果如下
abc-123-cba
123-abc-aabbcc-123
a-2-3-b-1
b-x-c-a-1
z-a-1
cbaabc
字符串中只要有'a'或'b'或'c',就匹配出來
3.當st = r'^abc'時,執行python文件得到的結果如下
abc-123-cba
字符串中只有'abc'開頭的才匹配出來
4.當st = '^[abc]'時,執行python文件得到的結果如下
abc-123-cba
a-2-3-b-1
b-x-c-a-1
cbaabc
字符串由'a'或'b'或'c'開頭的都匹配出來了
5.當st = '[^abc]'時,執行python文件得到的結果如下
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'的字符就都匹配出來了,這跟第三種情況是相反的
總結:
'abc'表示字符串中有'abc'就匹配成功
'[abc]'表示字符串中有'a'或'b'或'c'就匹配成功
'^abc'表示字符串由'abc'開頭就匹配成功
'^[abc]'表示字符串由'a'或'b'或'c'開頭的,
'[^abc]'表示匹配'a','b','c'之外的字符。如果一個字符串是由'a','b','c'組合起來的,那就是假
當^表示取反的時候,只有一種情況,就是在中括號里面,而且是每一個字符之外的。所以千萬不要把'[^abc]'看成是對'abc'字符串的取反。
如果想使用對'abc'字符串取反,則只能更改代碼
st = r'abc'
for i in s:
m = re.search(st, i)
if not m
列舉常用的取反:
'[^a-z]' 所有小寫字母之外的字符
'[^a-zA-Z]' 所有大寫和小寫字母之外的字符
'[^0-9]' 所有數字之外的字符
如果文章有錯誤,還望您指正。