程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python,shell正則表達式

編輯:Python

shell

基礎

[[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]拓展 

方括號拓展有一個簡寫形式[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:]包括換行符,回車等在內的所有空白

shell正則在grep命令中的應用

[[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結尾

Python正則表達式

單字符匹配

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個括號匹配出來的數據

在匹配的值前面加?:就不捕獲分組


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved