# -*- coding:UTF8 -*-
#1.概念:
# 正則表達(dá)式(或 RE)是一種小型的、高度專業(yè)化的編程語言蚣驼,
# (在Python中)它內(nèi)嵌在Python中偿警,并通過 re 模塊實(shí)現(xiàn)。使用這個(gè)小型語言苛秕,
# 你可以為想要匹配的相應(yīng)字符串集指定規(guī)則肌访;該字符串集可能包含英文語句、email
# 地址艇劫、TeX命令或任何你想搞定的東西吼驶。然后你可以問諸如“這個(gè)字符串匹配
# 該模式嗎?”或“在這個(gè)字符串中是否有部分匹配該模式呢店煞?”蟹演。你也可以使用 RE
# 以各種方式來修改或分割字符串。
#
# 正則表達(dá)式語言相對小型和受限(功能有限)顷蟀,因此并非所有字符串處理都能用
# 正則表達(dá)式完成酒请。當(dāng)然也有些任務(wù)可以用正則表達(dá)式完成,不過最終表達(dá)式會(huì)變
# 得異常復(fù)雜鸣个。碰到這些情形時(shí)羞反,編寫 Python 代碼進(jìn)行處理可能反而更好;盡管
# Python 代碼比一個(gè)精巧的正則表達(dá)式要慢些囤萤,但它更易理解昼窗。
#
#2.在正則表達(dá)式中, 如下的字符是具有特殊含義的
# . (所有字符) ^ $ *(0-N次) +(1-N次) ? (0-1次) { } [ ] \ | ( )
# 1)."[" 和 "]"阁将。它們常用來指定一個(gè)字符類別膏秫,所謂字符類別就是你想匹配的一個(gè)字符集
# 2).其它地方的"^"只會(huì)簡單匹配 "^"字符本身。例[^5] 將匹配除 "5" 之外的任意字符。
# 3).反斜杠后面可以加不同的字符以表示不同特殊意義缤削。它也可以用于取消所有的元字符
#
#3.RE 函數(shù)用法:
# findall(rule , target [,flag] ) 在目標(biāo)字符串中查找符合規(guī)則的字符串窘哈。
# match() 決定 RE 是否在字符串剛開始的位置匹配
# search() 掃描字符串,找到這個(gè) RE 匹配的位置
# findall() 找到 RE 匹配的所有子串亭敢,并把它們作為一個(gè)列表返回
# finditer() 找到 RE 匹配的所有子串滚婉,并把它們作為一個(gè)迭代器返回
# group() 返回被 RE 匹配的字符串
# start() 返回匹配開始的位置
# end() 返回匹配結(jié)束的位置
# span() 返回一個(gè)元組包含匹配 (開始,結(jié)束) 的位置
# compile( rule [,flag] )將正則規(guī)則編譯成一個(gè)Pattern對象,以供接下來使用第一個(gè)參數(shù)
#
# 是規(guī)則式帅刀,第二個(gè)參數(shù)是規(guī)則選項(xiàng)让腹。(使用compile加速)
#
#4 : 含義:
# 預(yù)定義轉(zhuǎn)義字符集: “\d” “\w” “\s” 等等,它們是以字符’\’開頭扣溺,后面接一個(gè)特定
#
#字符的形式,用來指示一個(gè)預(yù)定義好的含義
#
# ‘^’ 和’$’ 匹配字符串開頭和結(jié)尾
# ‘.’ 匹配所有字符 除\n以外
# ‘\d’ 匹配數(shù)字
# ‘\D’ 匹配非數(shù)字
# ‘\w’ 匹配字母和數(shù)字
# ‘\W’ 匹配非英文字母和數(shù)字
# ‘\s’ 匹配間隔符
# ‘\S’ 匹配非間隔符
# ‘\A’ 匹配字符串開頭
# ‘\Z’ 匹配字符串結(jié)尾
# ‘\b’ 只用以匹配單詞的詞首和詞尾骇窍。單詞被定義為一個(gè)字母數(shù)字序列,因此詞尾就
#
# 是用空白符或非字母數(shù)字符來標(biāo)示的锥余。(退格)
# ‘\B’腹纳,它正好同 \b 相反,只在當(dāng)前位置不在單詞邊界時(shí)匹配驱犹。
#5.前向界定與后向界定:
# ‘(?<=…)’ 前向界定:括號中’…’代表你希望匹配的字符串的前面應(yīng)該出現(xiàn)的字符串嘲恍。
# ‘(?=…)’后向界定 :括號中的’…’代表你希望匹配的字符串后面應(yīng)該出現(xiàn)的字符串
# ‘(?<!..)’前向非界定 :只有當(dāng)你希望的字符串前面不是’…’的內(nèi)容時(shí)才匹配
# ‘(?!...)’后向非界定 :只有當(dāng)你希望的字符串后面不跟著’…’內(nèi)容時(shí)才匹配。
#6.組的基本知識:
# ‘(‘’)’ 無命名組 [a-z]+(\d+)[a-z]+
# ‘(?P<name>…)’ 命名組 (?P<g1>[a-z]+)\d+(?P=g1)
# ‘(?P=name)’ 調(diào)用已匹配的命名組
# ‘\number’通過序號調(diào)用已匹配的組正則式中的每個(gè)組都有一個(gè)序號雄驹,序號是按組
#
#從左到右佃牛,從1開始的數(shù)字,你可以通過下面的形式來調(diào)用已匹配的組
# ( r"(\d+)([a-z]+)(\d+)(\2)(\1)" )
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import rhinoscriptsyntax as rs
# 正則表達(dá)式
import re
str1 = "abc \\ 123 456"
print re.findall("\\\\",str1) # 不用r和用r的區(qū)
print re.findall(r"\d\Z",str1) # 用"r"來定義規(guī)則字符串
p = re.compile('(a)b')
m = p.match('ab')
print m.group()
s = "aaa1 22 gg 333 ccc 4444 pppp 55555 666"
print re.findall(r"\b\d{3}\b",s)
print re.findall(r"\b\d{2,4}\b",s)
s2 = "aaa111aaa , bbb222 , 333ccc"
print re.findall( r"(?<=[a-z]+)\d+(?=[a-z]+)",s2 )
print re.findall( r"\d+(?=[a-z]+)",s2 )
## 目標(biāo) 前面是a-z 1-多次、中間數(shù)字1-9 1-多次
print re.findall(r"\d+(?!\w+)",s2)
#無命名組
print re.findall(r"[a-z]+(\d+)[a-z]+",s2) # 只返回()里面的
s3 = 'aaa111aaa,bbb222,333ccc,444ddd444,555eee666,fff777ggg,hhh888hhh'
print re.findall(r"([a-z]+)\d+([a-z]+)",s3) #返回括號里面的
#‘(?P<name>…)’ 命名組
print re.findall( r"(?P<g1>[a-z]+)\d+(?P=g1)",s3 ) #找出被中間夾有數(shù)字的前后同樣的字母
print re.findall(r"([a-z]+)\d+\1",s3)
s4 = "111aaa222aaa111,333bbb444bb33"
print re.findall( r"(\d+)([a-z]+)(\d+)(\2)(\1)", s4 ) #數(shù)字、字母、數(shù)字、字母噪舀、數(shù)字相對稱
print re.compile(r"(\d+)([a-z]+)(\d+)(\2)(\1)").findall(s4)
#compile( rule [,flag] ) 使用compile加速
s5 = "111,222,aaa,bbb,ccc333,444ddd"
print re.compile(r"\d+\b").findall(s5) # \退格 匹配一個(gè)位于開頭的數(shù)字,沒有使用M選項(xiàng)
s6 = "123 456\n789 012\n345 678"
print re.compile(r"^\d+",re.M).findall(s6) # 匹配位于(M/多行)開頭的數(shù)字
rcm=re.compile(r"\d+$")# 對于’$’來說丈攒,沒有使用M選項(xiàng)褥实,它將匹配最后一個(gè)行尾的數(shù)字,即’678’等曼,加上以后里烦,就能匹配三個(gè)行尾的數(shù)字456 012和678了.
print re.compile(r"\d+$",re.M).findall(s6) #
Python,Re模塊的學(xué)習(xí)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門刽漂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人弟孟,你說我怎么就攤上這事贝咙。” “怎么了拂募?”我有些...
- 文/不壞的土叔 我叫張陵庭猩,是天一觀的道長。 經(jīng)常有香客問我陈症,道長蔼水,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任录肯,我火速辦了婚禮趴腋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嘁信。我一直安慰自己于样,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布潘靖。 她就那樣靜靜地躺著穿剖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卦溢。 梳的紋絲不亂的頭發(fā)上糊余,一...
- 文/蒼蘭香墨 我猛地睜開眼尊沸,長吁一口氣:“原來是場噩夢啊……” “哼威沫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起洼专,我...
- 序言:老撾萬榮一對情侶失蹤棒掠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后屁商,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烟很,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了雾袱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恤筛。...
- 正文 年R本政府宣布粘驰,位于F島的核電站,受9級特大地震影響述么,放射性物質(zhì)發(fā)生泄漏蝌数。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一度秘、第九天 我趴在偏房一處隱蔽的房頂上張望顶伞。 院中可真熱鬧,春花似錦剑梳、人聲如沸唆貌。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽锨咙。三九已至,卻和暖如春追逮,著一層夾襖步出監(jiān)牢的瞬間酪刀,已是汗流浹背。 一陣腳步聲響...
- 正文 我出身青樓巴席,卻偏偏與公主長得像历涝,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子漾唉,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 今天在寫一段小代碼的時(shí)候需要用到re.split()方法睬关,在使用的過程中發(fā)現(xiàn)了一個(gè)以前不知道的新用法,發(fā)現(xiàn)這個(gè)用法...
- 廢話不多說蔫仙,先貼代碼: derivedDataPath = "/Users/dabao/Library/Devel...
- 該筆記整理自Wesley Chun著料睛,孫波翔、李斌、李晗譯恤煞,人民郵電出版社出版的《Python核心編程》第3版屎勘,還...
- Python中的re模塊 Python中提供perl風(fēng)格的正則表達(dá)式模式,re模塊使Python擁有全部的正則表達(dá)...