Pos()功能在一個字符串中查找所包含的另一個字符串的起始位置。語法Pos ( string1, string2 {, start } )
成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務,包含不限于成都做網(wǎng)站、網(wǎng)站設計、高坪網(wǎng)絡推廣、微信小程序、高坪網(wǎng)絡營銷、高坪企業(yè)策劃、高坪品牌公關、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務,您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)為所有大學生創(chuàng)業(yè)者提供高坪建站搭建服務,24小時服務熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com
參數(shù)string1:string類型,指定要從中查找子串string2的字符串string2:string類型,指定要在string1中查找的字符串start:long類型,可選項,指定從string1的第幾個字符開始查找。缺省值為1返回值Long。函數(shù)執(zhí)行成功時返回在start位置后string2在string1中第一次出現(xiàn)的起始位置。如果在string1中按指定要求未找到string2、或start的值超過了string1的長度,那么Pos()函數(shù)返回0。如果任何參數(shù)的值為NULL,Pos()函數(shù)返回NULL。用法Pos()函數(shù)在字符串查找時區(qū)分大小寫,因此,"aa"不匹配"AA"。
拓展資料:
公式的運用
一、數(shù)字處理
1、取絕對值函數(shù)
公式:=ABS(數(shù)字)
2、取整函數(shù)
公式:=INT(數(shù)字)
3、四舍五入函數(shù)
公式:=ROUND(數(shù)字,小數(shù)位數(shù))
二、判斷公式
1、如果計算的結果值錯誤那么顯示為空
公式:=IFERROR(數(shù)字/數(shù)字,)
說明:如果計算的結果錯誤則顯示為空,否則正常顯示。
2、IF語句的多條件判定及返回值
公式:IF(AND(單元格(邏輯運算符)數(shù)值,指定單元格=返回值1),返回值2,)
說明:所有條件同時成立時用AND,任一個成立用OR函數(shù)。
三、常用的統(tǒng)計公式
1、統(tǒng)計在兩個表格中相同的內(nèi)容
公式:B2=COUNTIF(數(shù)據(jù)源:位置,指定的,目標位置)
說明:如果返回值大于0說明在另一個表中存在,0則不存在。
如果,在此示例中所用到的公式為:B2=COUNTIF(Sheet15!A:A,A2)
2、統(tǒng)計不重復的總數(shù)據(jù)
公式:C2=SUMPRODUCT(1/COUNTIF(A2:A8,A2:A8))
說明:用COUNTIF函數(shù)統(tǒng)計出源數(shù)據(jù)中每人的出現(xiàn)次數(shù),并用1除的方式把變成分數(shù),最后再相加。
四、數(shù)據(jù)求和公式
1、隔列求和的應用
公式:H3=SUMIF($A$2:$G$2,H$2,A3:G3)或=SUMPRODUCT((MOD(COLUMN(B3:G3),2)=0)*B3:G3)
說明:如果在標題行中沒有規(guī)則就可以用第2個公式
2、單條件應用之求和
公式:F2=SUMIF(A:A,C:C)
說明:這是SUMIF函數(shù)的最基礎的用法
五、查找與引用公式
1、單條件查找
說明:VLOOKUP是excel中最常用的查找方式
六、字符串處理公式
1、多單元格字符串的合并
說明:Phonetic函數(shù)只能合并字符型數(shù)據(jù),不能合并數(shù)值。
2、截取結果3位之外的部分
說明:LEN計算總長度,LEFT從左邊截總長度-3個。
一、以下函數(shù)是turtle海龜庫內(nèi)關于海龜?shù)臓顟B(tài)函數(shù)
1、position()或 pos()獲取海龜?shù)漠斍拔恢米鴺?/p>
無參數(shù)
2、towards(x,y)與參考點的夾角
參數(shù):x,y坐標值,為towards測量夾角做參考
3、xcor()返回當前點的x坐標
無參數(shù)
4、ycor()返回當前點的y坐標
無參數(shù)
5、heading()返回海龜當前方位與(0,0)點(既原點)的夾角
無參數(shù)
6、distance(x,y)測量與參考坐標點之間的長度
參數(shù)(x,y)為參考坐標點
二、以下是設置單位的兩個函數(shù)
1、degrees(fullcircle)設置圓或圓弧以角度為單位,默認360度。
參數(shù):fullcircle 設置圓周多少度,默認圓一周360度
2、radians()設置圓或圓弧單位為弧度
無參數(shù)
python中ifabs(pos())是位置。pos是縮寫,代表位置。用計算機作畫,畫布就是坐標軸,畫筆的位置用坐標(x,y)表示,原點坐標(0,0),abs(pos())
回答于?2022-12-31
正則表達式是一個特殊的字符序列,用于簡潔表達一組字符串特征,檢查一個字符串是否與某種模式匹配,使用起來十分方便。
在Python中,我們通過調(diào)用re庫來使用re模塊:
import re
下面介紹Python常用的正則表達式處理函數(shù)。
re.match函數(shù)
re.match 函數(shù)從字符串的起始位置匹配正則表達式,返回match對象,如果不是起始位置匹配成功的話,match()就返回None。
re.match(pattern, string, flags=0)
pattern:匹配的正則表達式。
string:待匹配的字符串。
flags:標志位,用于控制正則表達式的匹配方式,如:是否區(qū)分大小寫,多行匹配等等。具體參數(shù)為:
re.I:忽略大小寫。
re.L:表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴于當前環(huán)境。
re.M:多行模式。
re.S:即 . ,并且包括換行符在內(nèi)的任意字符(. 不包括換行符)。
re.U:表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴于 Unicode 字符屬性數(shù)據(jù)庫。
re.X:為了增加可讀性,忽略空格和 # 后面的注釋。
import?re #從起始位置匹配 r1=re.match('abc','abcdefghi') print(r1) #不從起始位置匹配 r2=re.match('def','abcdefghi') print(r2)
運行結果:
其中,span表示匹配成功的整個子串的索引。
使用group(num) 或 groups() 匹配對象函數(shù)來獲取匹配表達式。
group(num):匹配的整個表達式的字符串,group() 可以一次輸入多個組號,這時它將返回一個包含那些組所對應值的元組。
groups():返回一個包含所有小組字符串的元組,從 1 到 所含的小組號。
import?re s='This?is?a?demo' r1=re.match(r'(.*)?is?(.*)',s) r2=re.match(r'(.*)?is?(.*?)',s) print(r1.group()) print(r1.group(1)) print(r1.group(2)) print(r1.groups()) print() print(r2.group()) print(r2.group(1)) print(r2.group(2)) print(r2.groups())
運行結果:
上述代碼中的(.*)和(.*?)表示正則表達式的貪婪匹配與非貪婪匹配。
re.search函數(shù)
re.search函數(shù)掃描整個字符串并返回第一個成功的匹配,如果匹配成功則返回match對象,否則返回None。
re.search(pattern, string, flags=0)
pattern:匹配的正則表達式。
string:待匹配的字符串。
flags:標志位,用于控制正則表達式的匹配方式,如:是否區(qū)分大小寫,多行匹配等等。
import?re #從起始位置匹配 r1=re.search('abc','abcdefghi') print(r1) #不從起始位置匹配 r2=re.search('def','abcdefghi') print(r2)
運行結果:
使用group(num) 或 groups() 匹配對象函數(shù)來獲取匹配表達式。
group(num=0):匹配的整個表達式的字符串,group() 可以一次輸入多個組號,這時它將返回一個包含那些組所對應值的元組。
groups():返回一個包含所有小組字符串的元組,從 1 到 所含的小組號。
import?re s='This?is?a?demo' r1=re.search(r'(.*)?is?(.*)',s) r2=re.search(r'(.*)?is?(.*?)',s) print(r1.group()) print(r1.group(1)) print(r1.group(2)) print(r1.groups()) print() print(r2.group()) print(r2.group(1)) print(r2.group(2)) print(r2.groups())
運行結果:
從上面不難發(fā)現(xiàn)re.match與re.search的區(qū)別:re.match只匹配字符串的起始位置,只要起始位置不符合正則表達式就匹配失敗,而re.search是匹配整個字符串,直到找到一個匹配為止。
re.compile 函數(shù)
compile 函數(shù)用于編譯正則表達式,生成一個正則表達式對象,供 match() 和 search() 這兩個函數(shù)使用。
re.compile(pattern[, flags])
pattern:一個字符串形式的正則表達式。
flags:可選,表示匹配模式,比如忽略大小寫,多行模式等。
import?re #匹配數(shù)字 r=re.compile(r'\d+')? r1=r.match('This?is?a?demo') r2=r.match('This?is?111?and?That?is?222',0,27) r3=r.match('This?is?111?and?That?is?222',8,27) ? print(r1) print(r2) print(r3)
運行結果:
findall函數(shù)
搜索字符串,以列表形式返回正則表達式匹配的所有子串,如果沒有找到匹配的,則返回空列表。
需要注意的是,match 和 search 是匹配一次,而findall 匹配所有。
findall(string[, pos[, endpos]])
string:待匹配的字符串。
pos:可選參數(shù),指定字符串的起始位置,默認為0。
endpos:可選參數(shù),指定字符串的結束位置,默認為字符串的長度。
import?re #匹配數(shù)字 r=re.compile(r'\d+')? r1=r.findall('This?is?a?demo') r2=r.findall('This?is?111?and?That?is?222',0,11) r3=r.findall('This?is?111?and?That?is?222',0,27) ? print(r1) print(r2) print(r3)
運行結果:
re.finditer函數(shù)
和 findall 類似,在字符串中找到正則表達式所匹配的所有子串,并把它們作為一個迭代器返回。
re.finditer(pattern, string, flags=0)
pattern:匹配的正則表達式。
string:待匹配的字符串。
flags:標志位,用于控制正則表達式的匹配方式,如是否區(qū)分大小寫,多行匹配等。
import?re? r=re.finditer(r'\d+','This?is?111?and?That?is?222') for?i?in?r:? ?print?(i.group())
運行結果:
re.split函數(shù)
將一個字符串按照正則表達式匹配的子串進行分割后,以列表形式返回。
re.split(pattern, string[, maxsplit=0, flags=0])
pattern:匹配的正則表達式。
string:待匹配的字符串。
maxsplit:分割次數(shù),maxsplit=1分割一次,默認為0,不限次數(shù)。
flags:標志位,用于控制正則表達式的匹配方式,如:是否區(qū)分大小寫,多行匹配等。
import?re? r1=re.split('\W+','This?is?111?and?That?is?222')? r2=re.split('\W+','This?is?111?and?That?is?222',maxsplit=1)? r3=re.split('\d+','This?is?111?and?That?is?222')? r4=re.split('\d+','This?is?111?and?That?is?222',maxsplit=1)? print(r1) print(r2) print(r3) print(r4)
運行結果:
re.sub函數(shù)
re.sub函數(shù)用于替換字符串中的匹配項。
re.sub(pattern, repl, string, count=0, flags=0)
pattern:正則中的模式字符串。
repl:替換的字符串,也可為一個函數(shù)。
string:要被查找替換的原始字符串。
count:模式匹配后替換的最大次數(shù),默認0表示替換所有的匹配。
import?re? r='This?is?111?and?That?is?222' #?刪除字符串中的數(shù)字 r1=re.sub(r'\d+','',r) print(r1) #?刪除非數(shù)字的字符串? r2=re.sub(r'\D','',r) print(r2)
運行結果:
到此這篇關于Python常用的正則表達式處理函數(shù)詳解的文章就介紹到這了,希望大家以后多多支持!
1.常用內(nèi)置函數(shù):(不用import就可以直接使用)
help(obj) 在線幫助, obj可是任何類型
callable(obj) 查看一個obj是不是可以像函數(shù)一樣調(diào)用
repr(obj) 得到obj的表示字符串,可以利用這個字符串eval重建該對象的一個拷貝
eval_r(str) 表示合法的python表達式,返回這個表達式
dir(obj) 查看obj的name space中可見的name
hasattr(obj,name) 查看一個obj的name space中是否有name
getattr(obj,name) 得到一個obj的name space中的一個name
setattr(obj,name,value) 為一個obj的name space中的一個name指向vale這個object
delattr(obj,name) 從obj的name space中刪除一個name
vars(obj) 返回一個object的name space。用dictionary表示
locals() 返回一個局部name space,用dictionary表示
globals() 返回一個全局name space,用dictionary表示
type(obj) 查看一個obj的類型
isinstance(obj,cls) 查看obj是不是cls的instance
issubclass(subcls,supcls) 查看subcls是不是supcls的子類
類型轉(zhuǎn)換函數(shù)
chr(i) 把一個ASCII數(shù)值,變成字符
ord(i) 把一個字符或者unicode字符,變成ASCII數(shù)值
oct(x) 把整數(shù)x變成八進制表示的字符串
hex(x) 把整數(shù)x變成十六進制表示的字符串
str(obj) 得到obj的字符串描述
list(seq) 把一個sequence轉(zhuǎn)換成一個list
tuple(seq) 把一個sequence轉(zhuǎn)換成一個tuple
dict(),dict(list) 轉(zhuǎn)換成一個dictionary
int(x) 轉(zhuǎn)換成一個integer
long(x) 轉(zhuǎn)換成一個long interger
float(x) 轉(zhuǎn)換成一個浮點數(shù)
complex(x) 轉(zhuǎn)換成復數(shù)
max(...) 求最大值
min(...) 求最小值
用于執(zhí)行程序的內(nèi)置函數(shù)
complie 如果一段代碼經(jīng)常要使用,那么先編譯,再運行會更快。
2.和操作系統(tǒng)相關的調(diào)用
系統(tǒng)相關的信息模塊 import sys
sys.argv是一個list,包含所有的命令行參數(shù).
sys.stdout sys.stdin sys.stderr 分別表示標準輸入輸出,錯誤輸出的文件對象.
sys.stdin.readline() 從標準輸入讀一行 sys.stdout.write("a") 屏幕輸出a
sys.exit(exit_code) 退出程序
sys.modules 是一個dictionary,表示系統(tǒng)中所有可用的module
sys.platform 得到運行的操作系統(tǒng)環(huán)境
sys.path 是一個list,指明所有查找module,package的路徑.
操作系統(tǒng)相關的調(diào)用和操作 import os
os.environ 一個dictionary 包含環(huán)境變量的映射關系 os.environ["HOME"] 可以得到環(huán)境變量HOME的值
os.chdir(dir) 改變當前目錄 os.chdir('d:\\outlook') 注意windows下用到轉(zhuǎn)義
os.getcwd() 得到當前目錄
os.getegid() 得到有效組id os.getgid() 得到組id
os.getuid() 得到用戶id os.geteuid() 得到有效用戶id
os.setegid os.setegid() os.seteuid() os.setuid()
os.getgruops() 得到用戶組名稱列表
os.getlogin() 得到用戶登錄名稱
os.getenv 得到環(huán)境變量
os.putenv 設置環(huán)境變量
os.umask 設置umask
os.system(cmd) 利用系統(tǒng)調(diào)用,運行cmd命令
操作舉例:
os.mkdir('/tmp/xx') os.system("echo 'hello' /tmp/xx/a.txt") os.listdir('/tmp/xx')
os.rename('/tmp/xx/a.txt','/tmp/xx/b.txt') os.remove('/tmp/xx/b.txt') os.rmdir('/tmp/xx')
用python編寫一個簡單的shell
#!/usr/bin/python
import os, sys
cmd = sys.stdin.readline()
while cmd:
os.system(cmd)
cmd = sys.stdin.readline()
用os.path編寫平臺無關的程序
os.path.abspath("1.txt") == os.path.join(os.getcwd(), "1.txt")
os.path.split(os.getcwd()) 用于分開一個目錄名稱中的目錄部分和文件名稱部分。
os.path.join(os.getcwd(), os.pardir, 'a', 'a.doc') 全成路徑名稱.
os.pardir 表示當前平臺下上一級目錄的字符 ..
os.path.getctime("/root/1.txt") 返回1.txt的ctime(創(chuàng)建時間)時間戳
os.path.exists(os.getcwd()) 判斷文件是否存在
os.path.expanduser('~/dir') 把~擴展成用戶根目錄
os.path.expandvars('$PATH') 擴展環(huán)境變量PATH
os.path.isfile(os.getcwd()) 判斷是否是文件名,1是0否
os.path.isdir('c:\Python26\temp') 判斷是否是目錄,1是0否
os.path.islink('/home/huaying/111.sql') 是否是符號連接 windows下不可用
os.path.ismout(os.getcwd()) 是否是文件系統(tǒng)安裝點 windows下不可用
os.path.samefile(os.getcwd(), '/home/huaying') 看看兩個文件名是不是指的是同一個文件
os.path.walk('/home/huaying', test_fun, "a.c")
遍歷/home/huaying下所有子目錄包括本目錄,對于每個目錄都會調(diào)用函數(shù)test_fun.
例:在某個目錄中,和他所有的子目錄中查找名稱是a.c的文件或目錄。
def test_fun(filename, dirname, names): //filename即是walk中的a.c dirname是訪問的目錄名稱
if filename in names: //names是一個list,包含dirname目錄下的所有內(nèi)容
print os.path.join(dirname, filename)
os.path.walk('/home/huaying', test_fun, "a.c")
文件操作
打開文件
f = open("filename", "r") r只讀 w寫 rw讀寫 rb讀二進制 wb寫二進制 w+寫追加
讀寫文件
f.write("a") f.write(str) 寫一字符串 f.writeline() f.readlines() 與下read類同
f.read() 全讀出來 f.read(size) 表示從文件中讀取size個字符
f.readline() 讀一行,到文件結尾,返回空串. f.readlines() 讀取全部,返回一個list. list每個元素表示一行,包含"\n"\
f.tell() 返回當前文件讀取位置
f.seek(off, where) 定位文件讀寫位置. off表示偏移量,正數(shù)向文件尾移動,負數(shù)表示向開頭移動。
where為0表示從開始算起,1表示從當前位置算,2表示從結尾算.
f.flush() 刷新緩存
關閉文件
f.close()
regular expression 正則表達式 import re
簡單的regexp
p = re.compile("abc") if p.match("abc") : print "match"
上例中首先生成一個pattern(模式),如果和某個字符串匹配,就返回一個match object
除某些特殊字符metacharacter元字符,大多數(shù)字符都和自身匹配。
這些特殊字符是 。^ $ * + ? { [ ] \ | ( )
字符集合(用[]表示)
列出字符,如[abc]表示匹配a或b或c,大多數(shù)metacharacter在[]中只表示和本身匹配。例:
a = ".^$*+?{\\|()" 大多數(shù)metachar在[]中都和本身匹配,但"^[]\"不同
p = re.compile("["+a+"]")
for i in a:
if p.match(i):
print "[%s] is match" %i
else:
print "[%s] is not match" %i
在[]中包含[]本身,表示"["或者"]"匹配.用
和
表示.
^出現(xiàn)在[]的開頭,表示取反.[^abc]表示除了a,b,c之外的所有字符。^沒有出現(xiàn)在開頭,即于身身匹配。
-可表示范圍.[a-zA-Z]匹配任何一個英文字母。[0-9]匹配任何數(shù)字。
\在[]中的妙用。
\d [0-9]
\D [^0-9]
\s [ \t\n\r\f\v]
\S [^ \t\n\r\f\v]
\w [a-zA-Z0-9_]
\W [^a-zA-Z0-9_]
\t 表示和tab匹配, 其他的都和字符串的表示法一致
\x20 表示和十六進制ascii 0x20匹配
有了\,可以在[]中表示任何字符。注:單獨的一個"."如果沒有出現(xiàn)[]中,表示出了換行\(zhòng)n以外的匹配任何字符,類似[^\n].
regexp的重復
{m,n}表示出現(xiàn)m個以上(含m個),n個以下(含n個). 如ab{1,3}c和abc,abbc,abbbc匹配,不會與ac,abbbc匹配。
m是下界,n是上界。m省略表下界是0,n省略,表上界無限大。
*表示{,} +表示{1,} ?表示{0,1}
最大匹配和最小匹配 python都是最大匹配,如果要最小匹配,在*,+,?,{m,n}后面加一個?.
match object的end可以得到匹配的最后一個字符的位置。
re.compile("a*").match('aaaa').end() 4 最大匹配
re.compile("a*?").match('aaaa').end() 0 最小匹配
使用原始字符串
字符串表示方法中用\\表示字符\.大量使用影響可讀性。
解決方法:在字符串前面加一個r表示raw格式。
a = r"\a" print a 結果是\a
a = r"\"a" print a 結果是\"a
使用re模塊
先用re.compile得到一個RegexObject 表示一個regexp
后用pattern的match,search的方法,得到MatchObject
再用match object得到匹配的位置,匹配的字符串等信息
RegxObject常用函數(shù):
re.compile("a").match("abab") 如果abab的開頭和re.compile("a")匹配,得到MatchObject
_sre.SRE_Match object at 0x81d43c8
print re.compile("a").match("bbab")
None 注:從str的開頭開始匹配
re.compile("a").search("abab") 在abab中搜索第一個和re_obj匹配的部分
_sre.SRE_Match object at 0x81d43c8
print re.compile("a").search("bbab")
_sre.SRE_Match object at 0x8184e18 和match()不同,不必從開頭匹配
re_obj.findall(str) 返回str中搜索所有和re_obj匹配的部分.
返回一個tuple,其中元素是匹配的字符串.
MatchObject的常用函數(shù)
m.start() 返回起始位置,m.end()返回結束位置(不包含該位置的字符).
m.span() 返回一個tuple表示(m.start(), m.end())
m.pos(), m.endpos(), m.re(), m.string()
m.re().search(m.string(), m.pos(), m.endpos()) 會得到m本身
m.finditer()可以返回一個iterator,用來遍歷所有找到的MatchObject.
for m in re.compile("[ab]").finditer("tatbxaxb"):
print m.span()
高級regexp
| 表示聯(lián)合多個regexp. A B兩個regexp,A|B表示和A匹配或者跟B匹配.
^ 表示只匹配一行的開始行首,^只有在開頭才有此特殊意義。
$ 表示只匹配一行的結尾
\A 表示只匹配第一行字符串的開頭 ^匹配每一行的行首
\Z 表示只匹配行一行字符串的結尾 $匹配第一行的行尾
\b 只匹配詞的邊界 例:\binfo\b 只會匹配"info" 不會匹配information
\B 表示匹配非單詞邊界
示例如下:
print re.compile(r"\binfo\b").match("info ") #使用raw格式 \b表示單詞邊界
_sre.SRE_Match object at 0x817aa98
print re.compile("\binfo\b").match("info ") #沒有使用raw \b表示退格符號
None
print re.compile("\binfo\b").match("\binfo\b ")
_sre.SRE_Match object at 0x8174948
分組(Group) 示例:re.compile("(a(b)c)d").match("abcd").groups() ('abc', 'b')
#!/usr/local/bin/python
import re
x = """
name: Charles
Address: BUPT
name: Ann
Address: BUPT
"""
#p = re.compile(r"^name:(.*)\n^Address:(.*)\n", re.M)
p = re.compile(r"^name:(?P.*)\n^Address:(?P.*)\n", re.M)
for m in p.finditer(x):
print m.span()
print "here is your friends list"
print "%s, %s"%m.groups()
Compile Flag
用re.compile得到RegxObject時,可以有一些flag用來調(diào)整RegxObject的詳細特征.
DOTALL, S 讓.匹配任意字符,包括換行符\n
IGNORECASE, I 忽略大小寫
LOCALES, L 讓\w \W \b \B和當前的locale一致
MULTILINE, M 多行模式,只影響^和$(參見上例)
VERBOSE, X verbose模式
你沒看到那是一個函數(shù)嗎?POS是_inti_函數(shù)的一個參數(shù)啊。以后你調(diào)用這個函數(shù)的時候,例如:
_init_(3),那么POS的值就是3羅。也就是說POS的值是你給他的。你給3就3,你給'XXX'就'XXX'。