1. 程式人生 > >Python學習的第23天re、subprocess

Python學習的第23天re、subprocess

一、re

1、重複匹配

(1).:匹配換行符以外的任意一個字元
# print(re.findall('a.c','abc a1c aac asd aaaaac a*c a+c abasd')) #['abc','a1c','aac','aac','a*c','a+c']
#                                                        a.c
# print(re.findall('a.c','abc a1c aac a\nc asd aaaaac a*c a+c abasd',re.DOTALL))

(2)[]:匹配一個字元,該字元屬於中括號內指定的字元
# print(re.findall('a..c','abc a1 c aac asd aaaaac a *c a+c abasd ='))
# print(re.findall('a.c','abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c'))
# print(re.findall('a[a-z]c','abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c'))
# print(re.findall('a[A-Z]c','abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c'))
# print(re.findall('a[-+*/]c','abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c'))
# print(re.findall('a[a-z][a-z]c','abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c'))
# print(re.findall('a[^a-z]c','abc a1 c aac aAc aBc asd aaaaac a-c a/c a *c a+c abasd = a1c a2c'))

(3)# *: 必須與其他字元連用,代表左側最近的第一個字元出現0次或者無窮次
# print(re.findall('ab*','a ab abbb abbbb a1bbbb a-123'))
# ab*
#['a','ab','abbb','abbbb','a','a']
# print(re.findall('ab{0,}','a ab abbb abbbb a1bbbb a-123'))

(4)# ?: 必須與其他字元連用,代表左側最近的第一個的字元出現0次或者1次
# print(re.findall('ab?','a ab abbb abbbb a1bbbb a-123'))
# ab?
#['a','ab','ab','ab','a','a']
# print(re.findall('ab{0,1}','a ab abbb abbbb a1bbbb a-123'))

 

(5)# +: 必須與其他字元連用,代表左側的字元出現1次或者無窮次
# print(re.findall('ab+','a ab abbb abbbb a1bbbb a-123'))
# ab+
# ['ab','abbb','abbbb']
# print(re.findall('ab{1,}','a ab abbb abbbb a1bbbb a-123'))

 

(6)# {n,m}: 必須與其他字元連用
# print(re.findall('ab{1,3}','a ab abbb abbbb a1bbbb a-123'))
# ab{1,3}
# ['ab','abbb','abbb']

 2、

(1).*:貪婪匹配
# print(re.findall('a.*c','ab123adfc1134124123adasfc123123'))

(2) .*?:非貪婪匹配
# print(re.findall('a.*?c','ab123adfc1134124123adasfc123123')

 

(3)():分組   不影響匹配,但只會取()內的內容,如果都要取(?:   )
# print(re.findall('expression="(.*?)"','expression="1+2+3/4*5" egon="beautiful"'))
# expression=".*?"


# print(re.findall('href="(.*?)"','<p>段落</p><a href="https://www.sb.com">點我啊

 (4)|豎槓  表示左邊或者右邊   

print(re.findall('a|b','ab123abasdfaf'))
#                        a|b
#取companies 或 company   

# print(re.findall('compan(?:ies|y)','Too many companies have gone bankrupt, and the next one is my company'))

PS:re匹配識別的流程:先pythin識別一次字串,re再識別一次字串

比如我們要把a\c匹配出來,而\本身又是轉譯,實際要寫成a\\\\c才能

3.re、search()從左到右匹配,找到一個就結束

print(re.findall('ale(x)','alex is SB,alex is bigSB'))
print(re.search('alex','alex is SB,alex is bigSB'))
print(re.search('ale(x)','alex is SB,alex is bigSB').group())
print(re.search('abcdefg','alex is SB,alex is bigSB'))

 

4、re.match()   只能從頭開始匹配,第一個不是就返回None

 print(re.search('^alex','123alex is SB,alex is bigSB'))
# print(re.match('alex','123alex is SB,alex is bigSB'))

5、re.split()切割

# l='egon:18:male'.split(':')
# print(l)
# l1=re.split('[ :/-]','a-b/c egon:18:male xxx')
# print(l1)

6、re.sub()替代

re.sub(‘原‘,‘新’,‘內容’,次數)次數可不寫,預設全部替換

 print(re.sub('[a-z]+xx','yxp','lxx is good,sb is lllxx wxx is good cxx is good')

7、re.compile()預存一個正則表示式可以重複使用

# pattern=re.compile('alex')
# print(pattern.findall('alex is SB,alex is bigSB'))
# print(pattern.search('alex is SB,alex is bigSB'))