#!/usr/bin/env python3 # -*- coding: utf-8 -*- '''Python 字符串操作 string替換、刪除、截取、復制、連接、比較、查找、包含、大小寫轉換、分割等 @author: HK ''' if __name__ == '__main__': s = ' s dfg hjk,大 家好,。:?-_+0 ' #去兩邊空格及指定符號 print(s.strip())#兩邊都替換 # Return a copy of the string S with leading and trailing # whitespace removed. # If chars is given and not None, remove characters in chars instead. print(s.lstrip('s'))#左替換 print(s.rstrip('_+0 '))#右替換 #復制字符串,類似C語言中的strcpy(sStr1,sStr2) sStr1 = 'strcpy' sStr2 = sStr1 sStr1 = 'strcpy2' print(sStr2,sStr1,sStr2,sStr1) #連接字符串,類似C語言中的strcat(sStr1,sStr2) sStr1 = 'strcat' sStr2 = 'append' sStr1 += sStr2 print(sStr1) #查找字符,類似C語言中的strchr(sStr1,sStr2) sStr1 = 'strchr' sStr2 = 'tr'#< 0 為未找到 nPos = sStr1.index(sStr2) print(nPos) #比較字符串,類似C語言中的strcmp(sStr1,sStr2),py3中取消了cmp函數cmp(sStr1,sStr2),對於int可以用表達式(a > b) - (a < b)代替cmp(a,b) sStr1 = 'strchr' sStr2 = 'strch' print((sStr1 == sStr2)) #掃描字符串是否包含指定的字符,類似C語言中的strspn(sStr1,sStr2) sStr1 = '12345678'#sStr1 and chars both in sStr1 and sStr2 sStr2 = '567' print(sStr1.count(sStr2)>0) print('abcde'.find('bcd') >= 0) #字符串長度類似C語言中的strlen(sStr1) sStr1 = 'strlen' print(len(sStr1)) #將字符串中的大小寫轉換,類似C語言中的strlwr(sStr1) sStr1 = 'JCstrlwr' print(sStr1.upper()) sStr1 = sStr1.lower() print(sStr1) #追加指定長度的字符串,類似C語言中的strncat(sStr1,sStr2,n) sStr1 = '12345' sStr2 = 'abcdef' n = 3 sStr1 += sStr2[0:n] print(sStr1) #字符串指定長度比較,類似C語言中的strncmp(sStr1,sStr2,n) sStr1 = '12345' sStr2 = '123bc' n = 3 print((sStr1[0:n]==sStr2[0:n])) #復制指定長度的字符,類似C語言中的strncpy(sStr1,sStr2,n) sStr1 = '' sStr2 = '12345' n = 3 sStr1 = sStr2[0:n] print(sStr1) #將字符串前n個字符替換為指定的字符,類似C語言中的strnset(sStr1,ch,n) sStr1 = '12345' ch = 'r' n = 3 sStr1 = n * ch + sStr1[n:] print(sStr1) #掃描字符串,類似C語言中的strpbrk(sStr1,sStr2) sStr1 = 'cekjgdklab' sStr2 = 'gka' nPos = -1 for c in sStr1: if c in sStr2: nPos = sStr1.index(c) break print(nPos)#sStr1中第幾個字符開始包含sStr2中的字符 #翻轉字符串,類似C語言中的strrev(sStr1) sStr1 = 'abcdefg' sStr1 = sStr1[::-1] print(sStr1) #查找字符串,類似C語言中的strstr(sStr1,sStr2) sStr1 = 'abcdefg' sStr2 = 'cde' print(sStr1.find(sStr2))#sStr1中從那個下標開始包含sStr2 #分割字符串,類似C語言中的strtok(sStr1,sStr2) sStr1 = 'ab,cde,fgh,ijk' sStr2 = ',' sStr1 = sStr1[sStr1.find(sStr2) + 1:] print(sStr1)#分割一次!或者 s = 'ab,cde,fgh,ijk' print(s.split(','))#全局分割 #連接字符串 delimiter = ',' mylist = ['Brazil', 'Russia', 'India', 'China'] print(delimiter.join(mylist)) #PHP 中 addslashes 的實現,防止SQL注入攻擊 def addslashes(s): d = {'"':'\\"', "'":"\\'", "\0":"\\\0", "\\":"\\\\"} return ''.join(d.get(c, c) for c in s)#D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None. #可以用return '$'.join(d.get(c, c) for c in s)做測試 s = '''John 'Johny' Doe (a.k.a. "Super Joe")\ break'''+' and \0'+'\t end' print(s) print(addslashes(s)) #只顯示字母與數字 def OnlyCharAndNum(s,oth=''): s2 = s.lower(); fomart = 'abcdefghijklmnopqrstuvwxyz0123456789' for c in s2: if not c in fomart: s = s.replace(c,''); return s; print(OnlyCharAndNum("a000 aa-b")) #截取字符串 sStr = '0123456789' print(sStr[0:3])#截取第一位到第三位的字符 print(sStr[:])#截取字符串的全部字符 print(sStr[6:])#截取第七個字符到結尾 print(sStr[:-3])#截取從頭開始到倒數第三個字符之前 print(sStr[2])#截取第三個字符 print(sStr[-1])#截取倒數第一個字符 print(sStr[::-1])#創造一個與原字符串順序相反的字符串 print(sStr[-3:-1])#截取倒數第三位與倒數第一位之前的字符 print(sStr[-3:])#截取倒數第三位到結尾 print(sStr[:-8:-1])#逆序截取,從最后一個倒數截取至倒數第8個字符‘2’步長為1 print(sStr[:-8:-2])#逆序截取,從最后一個倒數截取至倒數第8個字符‘2’步長為2 print(sStr[:-8:-5])#逆序截取,從最后一個倒數截取至倒數第8個字符‘2’步長為2 #python 字符串替換2種方法:1用字符串本身的方法;2用正則來替換字符串 a = 'hello word' #把a字符串里的word替換為python,1用字符串本身的replace方法 print(a.replace('word','python'))#輸出的結果是hello python #2用正則表達式來完成替換: import re reR = r'[wor]d' #perl寫法 strinfo = re.compile(reR) #編譯后運行速度更快 b = strinfo.sub('python',a) print(b)#輸出hello wopython