日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

正则表达式(一)

發布時間:2024/1/3 综合教程 30 生活家
生活随笔 收集整理的這篇文章主要介紹了 正则表达式(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正則表達式的元字符有. ^ $ * + ? { [ ] | ( )

.表示任意字符

$ 匹配行結束符。例如正則表達式weasel$ 能夠匹配字符串"He's a weasel"的末尾,但是不能匹配字符串"They are a bunch of weasels."

在MULTILINE模式下,"$"也匹配換行之前

[] 用來匹配一個指定的字符類別,所謂的字符類別就是你想匹配的一個字符集,對于字符集中的字符可以理解成或的關系。[adgk]

( )(red|blue|green) 查找任何指定的選項。

^ 在[]的首個字符, 表示取非,。[^5]表示除了5之外的其他字符;

如果放在字符串的開頭,則表示匹配字符串的開始,如“^ab”表示以ab開頭的字符串。

如果^不在字符串的開頭,則表示它本身。

具有重復功能的元字符(匹配數量):

* 對于前一個字符重復0到無窮次

+ 對于前一個字符重復1到無窮次

?對于前一個字符重復0到1次

{m,n} 對于前一個字符重復次數在為m到n次,試匹配盡可能多的copy(優先匹配n)其中,{0,} = *,{1,} = , {0,1} = ?

{m,n}? 用來表示前面正則表達式的m到n次copy,嘗試匹配盡可能少的copy

{m} 對于前一個字符重復m次

d 匹配任何十進制數;它相當于類 [0-9]。

D 匹配任何非數字字符;它相當于類 [^0-9]。

s 匹配任何空白字符;它相當于類 [ fv]。

S 匹配任何非空白字符;它相當于類 [^ fv]。

w 匹配任何字母數字字符;它相當于類 [a-zA-Z0-9_]。

W 匹配任何非字母數字字符;它相當于類 [^a-zA-Z0-9_]。

http://www.w3school.com.cn/jsref/jsref_regexp_onemore.asp

Note:

寫法: 期望的字符+數量 ,

. 任意字符都可以

s 這個地方要空白字符

s+ 這個地方要 1-無窮個空白字符

.{0,10}這個地方要匹配0-10個字符

對于字符串本身出現元字符的字符, 用 來表示本字符意思。 如匹配這個值:[main] , 在正則搜索里面要寫成 [main]

[.{40}]s+Method.{0,100}groups.{0,12}config.{0,2}
replace 則把相應行刪除掉, 清理日志方便查看

[.{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中, 結合正則表達式, 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")  #區別于search
print 5, m
m=re.match("ab+", "abbbb")
print 6, m.group()

m=re.search("^aw+","abcdfa
a1b2c3",re.MULTILINE) #匹配到就返回,區別于下面的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) # $匹配字符串的結尾或者字符串結尾的換行之前(在MULTILINE模式下)
print 10, m
m=re.findall("foo.$","foo1
foo2
") # $匹配字符串的結尾
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)   # 多個參數返回一個元組
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") #括號去掉后的區別
print 22, m.group()
#print m.group(1,2)   #IndexError: no such group,與去掉()后, 19區別

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")

附:
執行結果如下:

總結

以上是生活随笔為你收集整理的正则表达式(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。