[[email protected] ~]# mkdir b.txt
[[email protected] ~]# mkdir a.txt
[[email protected] ~]# ls ?.txt
a.txt:
b.txt:
[[email protected] ~]# mkdir bb.txt
[[email protected] ~]# mkdir cc.txt
[[email protected] ~]# ls ??.txt
bb.txt:
cc.txt:
?匹配單個字符
?有幾個就匹配幾個字符
[[email protected] ~]# mkdir cc.txt
[[email protected] ~]# mkdir bb.txt
[[email protected] ~]# mkdir ab.txt
[[email protected] ~]# mkdir a.txt
[[email protected] ~]# mkdir b.txt
[[email protected] ~]# ls *.txt
ab.txt:
a.txt:
bb.txt:
b.txt:
cc.txt:
[[email protected] ~]# ls a*.txt
ab.txt:
a.txt:
*可匹配任意數量的任意字符(也可匹配空字符,a背後是空也匹配了)
[[email protected] ~]# ls [ab].txt
a.txt:
b.txt:
[] : 匹配括號中的任意一個字符
shell的正則與其他語言的不太一樣,[]只能匹配一個字符,例如ab.txt就匹配不上
[[email protected] ~]# touch aaa bbb aba
[[email protected] ~]# ls ?[!a]?
aba bbb
!和^:表示匹配除了括號中的字符
方括號拓展有一個簡寫形式[start-end],表示匹配一個連續的范圍,例如[a-d]等於[abcd],[0-9]等於[0123456789]
[[email protected] ~]# ls [a-z].txt
a.txt:
b.txt:
[[email protected] ~]# ls [a]*.txt
ab.txt:
a.txt:
[a]*:表示匹配以a開頭的字符
大括號{,,,}表示分別拓展成大括號裡的所有值
[[email protected] ~]# echo d{a,b,c,d,e}g
dag dbg dcg ddg deg
表示集合的字符類描述:
[:alnum:]字符與數字字符[:alpha:]字母字符(包括大小寫字母)[:blank:]空格與制表符[:digit:]數字[:lower:]小寫字母[:upper:]大寫字母[:punct:]標點符號[:space:]包括換行符,回車等在內的所有空白[[email protected] ~]# vim demo1
[[email protected] ~]# cat demo1
ggle
gogle
google
gooooooooooooooooooooooooooooooooooooooogle
在demo1中寫入字段
[[email protected] ~]# grep "g[o]*gle" demo1
ggle
gogle
google
gooooooooooooooooooooooooooooooooooooooogle
[[email protected] ~]# grep "g[o].*gle" demo1
gogle
google
gooooooooooooooooooooooooooooooooooooooogle
[[email protected] ~]# grep "g[o]\?gle" demo1
ggle
gogle
[[email protected] ~]# grep "g[o]\+gle" demo1
gogle
google
gooooooooooooooooooooooooooooooooooooooogle
[[email protected] ~]# grep "g[o]\{1,2\}gle" demo1
gogle
google
[[email protected] ~]# grep ^g demo1
ggle
gogle
google
gooooooooooooooooooooooooooooooooooooooogle
[[email protected] ~]# grep e$ demo1
ggle
gogle
google
gooooooooooooooooooooooooooooooooooooooogle
* :匹配前面的子表達式零次或多次
[] :匹配包含在方括號裡的任意一個字符或一組單個字符
.:匹配任意字符但只能匹配一次
.* :任意字符任意多次,包括0次
上述gogle就是匹配0次
\?:是匹配0次到一次
\+:匹配一次到多次
\{x,y\}:匹配x次到y次
\{2,\}:匹配兩次以上
^g:匹配以g開頭
&e:匹配以e結尾
import re
a = 'gc++8g354fpythonsg435ffgdg3453javascript*&%(@#'
result = re.findall('\d+',a) # ['8', '354', '435', '3453']
result1 = re.findall('\d',a) #['8', '3', '5', '4', '4', '3', '5', '3', '4', '5', '3']
result2 = re.findall('\d*',a) #['', '', '', '', '8', '', '354', '', '', '', '', '', '', '', '', '', '435', '', '', '', '', '', '3453', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
result3 = re.findall('\d?',a)#['', '', '', '', '8', '', '3', '5', '4', '', '', '', '', '', '', '', '', '', '4', '3', '5', '', '', '', '', '', '3', '4', '5', '3', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
result4 = re.findall('[0-9]',a)#['8', '3', '5', '4', '4', '3', '5', '3', '4', '5', '3']
result5 = re.findall('\w*',a)#['gc', '', '', '8g354fpythonsg435ffgdg3453javascript', '', '', '', '', '', '', '']
[] :匹配[]裡的字符例如,[0-9]就是匹配所有數字
\d:匹配所有數字
\w:匹配所有字母
\s:匹配所有空格
*:匹配前一個字符出現0次到無數次
+:匹配前一個字符出現1次到無數次
?:匹配前一個字符出現0次到1次
import re
s = 'abc adc aec afc agc ahc abb'
result = re.findall('a[^cf]c',s) #['abc', 'adc', 'aec', 'agc', 'ahc']
^和!都是取反,^cf就是匹配除了cf的字符
import re
a = 'python 13432 java 342 node'
result = re.findall('[a-z]{3,6}',a) #['python', 'java', 'node']
result1 = re.findall('[a-z]{3,6}?',a) #['pyt', 'hon', 'jav', 'nod']
{x,y}:匹配x次到y次
由於默認是貪婪模式,所以沒有?的時候匹配了6次
有?就匹配3次
x(?=y):匹配‘x’僅僅當‘x’後面跟著‘y’
(?<=y)x:匹配‘x’僅僅當‘x’前面是‘y’
x(?!y):y前面不跟著x匹配成功時匹配‘x’
(?<!y)x:僅僅當‘x’前面不是‘y’時匹配‘x’
import re
a = '<a target=_blank href="www.baidu.com">百度一下</a>百度知道' #這是一個a標簽,把www.baidu.com匹配出來
result = re.search('(?<=(href=")).{1,200}(?=(">))',a) #<re.Match object; span=(23, 36), match='www.baidu.com'>
(?<=(href=")):匹配href="後面的字符
(?=(">)):匹配">前面的字符
就可以把www.baidu.com匹配出來
分組:group(0):就是匹配出來是數據
group(n):第n個括號匹配出來的數據
在匹配的值前面加?:就不捕獲分組
實現效果:打開App進行自動化測試,只需打開APP一次,按先
Running django Project time ,