正则表达式(一)
正則表達式的元字符有. ^ $ * + ? { [ ] | ( )
.表示任意字符
$ 匹配行結(jié)束符。例如正則表達式weasel$ 能夠匹配字符串"He's a weasel"的末尾,但是不能匹配字符串"They are a bunch of weasels."
在MULTILINE模式下,"$"也匹配換行之前
[] 用來匹配一個指定的字符類別,所謂的字符類別就是你想匹配的一個字符集,對于字符集中的字符可以理解成或的關(guān)系。[adgk]
( )(red|blue|green) 查找任何指定的選項。
^ 在[]的首個字符, 表示取非,。[^5]表示除了5之外的其他字符;
如果放在字符串的開頭,則表示匹配字符串的開始,如“^ab”表示以ab開頭的字符串。
如果^不在字符串的開頭,則表示它本身。
具有重復(fù)功能的元字符(匹配數(shù)量):
* 對于前一個字符重復(fù)0到無窮次
+ 對于前一個字符重復(fù)1到無窮次
?對于前一個字符重復(fù)0到1次
{m,n} 對于前一個字符重復(fù)次數(shù)在為m到n次,試匹配盡可能多的copy(優(yōu)先匹配n)其中,{0,} = *,{1,} = , {0,1} = ?
{m,n}? 用來表示前面正則表達式的m到n次copy,嘗試匹配盡可能少的copy
{m} 對于前一個字符重復(fù)m次
d 匹配任何十進制數(shù);它相當于類 [0-9]。
D 匹配任何非數(shù)字字符;它相當于類 [^0-9]。
s 匹配任何空白字符;它相當于類 [ fv]。
S 匹配任何非空白字符;它相當于類 [^ fv]。
w 匹配任何字母數(shù)字字符;它相當于類 [a-zA-Z0-9_]。
W 匹配任何非字母數(shù)字字符;它相當于類 [^a-zA-Z0-9_]。
http://www.w3school.com.cn/jsref/jsref_regexp_onemore.asp
Note:
寫法: 期望的字符+數(shù)量 ,
. 任意字符都可以
s 這個地方要空白字符
s+ 這個地方要 1-無窮個空白字符
.{0,10}這個地方要匹配0-10個字符
對于字符串本身出現(xiàn)元字符的字符, 用 來表示本字符意思。 如匹配這個值:[main] , 在正則搜索里面要寫成 [main]
[.{40}]s+Method.{0,100}groups.{0,12}config.{0,2}
replace 則把相應(yīng)行刪除掉, 清理日志方便查看
[.{40}]s+Checking.{0,75}groups.{0,12}config.{0,2}
[2015.{40,100}]s+Waitings+fors+(Input|element)s+(xpath=|id=).{0,100}
下面具體python中, 結(jié)合正則表達式, RE模塊的使用:
# coding=gb2312
'''
Created on 2014-06-4
@author: jennifer.huang
'''
import re
print"****re.search()**search和match方法是匹配到就返回,而不是去匹配所有, 并且match只匹配字符串的開始***"
m=re.search("^ab+", "asdfabbbb") # ^表示開頭
print 1, m
m=re.search("ab+", "asdfabbbb")
print 2, m
print 3, m.group()
m=re.search("[^abc]","abcd") # ^表示取非
print 4, m.group();
m=re.match("ab+", "asdfabbbb") #區(qū)別于search
print 5, m
m=re.match("ab+", "abbbb")
print 6, m.group()
m=re.search("^aw+","abcdfa
a1b2c3",re.MULTILINE) #匹配到就返回,區(qū)別于下面的findall
print 7, m.group()
m=re.search("foo.$","foo1
foo2
",re.MULTILINE)
print 8, m.group()
m=re.findall("^aw+","abcdfa
a1b2c3",re.MULTILINE) #返回 list
print 9, m
m=re.findall("foo.$","foo1
foo2
",re.MULTILINE) # $匹配字符串的結(jié)尾或者字符串結(jié)尾的換行之前(在MULTILINE模式下)
print 10, m
m=re.findall("foo.$","foo1
foo2
") # $匹配字符串的結(jié)尾
print 11, m
print 12, re.findall("a{2,4}","aaaaaaaa") #表示前面正則表達式的m到n次copy,嘗試匹配盡可能多的copy
print 13, re.findall("a{2,4}?","aaaaaaaa") #表示前面正則表達式的m到n次copy,嘗試匹配盡可能少的copy
print 14, re.match(".","
") #元字符“.”在默認模式下,匹配除換行符外的所有字符
print 15, re.match(".","
",re.DOTALL).group() #在DOTALL模式下,匹配所有字符,包括換行符
m=re.match("(w+) (w+)","abcd efgh, chaj")
print 16, m.group() # 匹配全部
print 17, m.group(1) # 第一個括號的子組.
print 18, m.group(2)
print 19, m.group(1,2) # 多個參數(shù)返回一個元組
m=re.match("(?P<first_name>w+) (?P<last_name>w+)","Jennifer Huang")
print 20, m.group("first_name") #使用group獲取含有name的子組
print 21, m.group("last_name")
m=re.match("w+ w+","abcd efgh, chaj") #括號去掉后的區(qū)別
print 22, m.group()
#print m.group(1,2) #IndexError: no such group,與去掉()后, 19區(qū)別
m=re.match("(d+).(d+)","23.123")
print 23, m.groups()
m=re.match("(w+) (w+)","hello world")
print 24, m.groupdict() #groupdict()對沒有name的子組不起作用
m=re.match("(?P<first>w+) (?P<second>w+)","hello world")
print 25, m.groupdict()
print 26, re.split("W+","words,words,works",1)
print 27, re.split("[a-z]","OA3b9z",re.IGNORECASE)
print 28, re.sub("d","RE","abc1def2hijk")
print 29, re.subn("d","RE","abc1def2hijk")
附:
執(zhí)行結(jié)果如下:
總結(jié)
- 上一篇: 用了WiFi6路由器WIFI6路由器网速
- 下一篇: C编程中fread 、fwrite 用法