dreamweaver 正则表达式为属性值加上双引号_Python正则表达式(一)
Python正則表達式
正則表達式是處理字符串的強大工具,擁有獨特的語法和獨立的處理引擎。
我們在大文本中匹配字符串時,有些情況用str自帶的函數(比如find, in)可能可以完成,有些情況會稍稍復雜一些(比如說找出所有“像郵箱”的字符串,所有和chinahadoop相關的句子),這個時候我們需要一個某種模式的工具,這個時候正則表達式就派上用場了。
說起來正則表達式效率上可能不如str自帶的方法,但匹配功能實在強大太多。對啦,正則表達式不是Python獨有的,如果已經在其他語言里使用過正則表達式,這里的說明只需要簡單看一看就可以上手啦。
語法
正則表達書是一個包含眾多語法的技能,相對于“閉卷考試”,大家一定也更喜歡“開卷考試”,這里我們為大家準備了一張python正則表達式速查表,一起來學習一下。
當你要匹配 一個/多個/任意個 數字/字母/非數字/非字母/某幾個字符/任意字符,想要 貪婪/非貪婪 匹配,想要捕獲匹配出來的 第一個/所有 內容的時候,記得這里有個小手冊供你參考。
我們借助于http://regexr.com/ ,來快速帶大家學習一下。
驗證工具
我們最喜愛的正則表達式在線驗證工具之一是http://regexr.com/
可以幫助大家快速學習、練習和鞏固,注意到左側有一些功能列表,也包含很多有用的內容。
挑戰與提升
對于做自然語言處理的同學而言,正則表達式是一個必備的技能,我曾經有半年寫了大量的正則表達式,以至于同事間開玩笑說,只要是符合某種規律或者模式的串,肯定分分鐘能匹配出來。
對于想練習正則表達式,或者短期內快速get復雜技能,or想挑戰更復雜的正則表達式的同學們。 請戳正則表達式進階練習
各位寶寶enjoy yourself
Python正則表達式
re模塊
Python通過re模塊提供對正則表達式的支持。
使用re的一般步驟是
- 1.將正則表達式的字符串形式編譯為Pattern實例
- 2.使用Pattern實例處理文本并獲得匹配結果(一個Match實例)
- 3.使用Match實例獲得信息,進行其他的操作。
In [1]:
# encoding: UTF-8 import re# 將正則表達式編譯成Pattern對象 pattern = re.compile(r'hello.*!')# 使用Pattern匹配文本,獲得匹配結果,無法匹配時將返回None match = pattern.match('hello, AI職場技術分享! How are you?')if match:# 使用Match獲得分組信息print match.group() hello, AI職場技術分享!re.compile(strPattern[, flag]):
這個方法是Pattern類的工廠方法,用于將字符串形式的正則表達式編譯為Pattern對象。
第二個參數flag是匹配模式,取值可以使用按位或運算符'|'表示同時生效,比如re.I | re.M。
當然,你也可以在regex字符串中指定模式,比如re.compile('pattern', re.I | re.M)等價于re.compile('(?im)pattern')
flag可選值有:
- re.I(re.IGNORECASE): 忽略大小寫(括號內是完整寫法,下同)
- re.M(MULTILINE): 多行模式,改變'^'和'$'的行為(參見上圖)
- re.S(DOTALL): 點任意匹配模式,改變'.'的行為
- re.L(LOCALE): 使預定字符類 w W b B s S 取決于當前區域設定
- re.U(UNICODE): 使預定字符類 w W b B s S d D 取決于unicode定義的字符屬性
- re.X(VERBOSE): 詳細模式。這個模式下正則表達式可以是多行,忽略空白字符,并可以加入注釋。以下兩個正則表達式是等價的:
In [2]:
regex_1 = re.compile(r"""d + # 數字部分. # 小數點部分d * # 小數的數字部分""", re.X) regex_2 = re.compile(r"d+.d*")Match
Match對象是一次匹配的結果,包含了很多關于此次匹配的信息,可以使用Match提供的可讀屬性或方法來獲取這些信息。
match屬性:
- string: 匹配時使用的文本。
- re: 匹配時使用的Pattern對象。
- pos: 文本中正則表達式開始搜索的索引。值與Pattern.match()和Pattern.seach()方法的同名參數相同。
- endpos: 文本中正則表達式結束搜索的索引。值與Pattern.match()和Pattern.seach()方法的同名參數相同。
- lastindex: 最后一個被捕獲的分組在文本中的索引。如果沒有被捕獲的分組,將為None。
- lastgroup: 最后一個被捕獲的分組的別名。如果這個分組沒有別名或者沒有被捕獲的分組,將為None。
match方法:
- group([group1, …]):
獲得一個或多個分組截獲的字符串;指定多個參數時將以元組形式返回。group1可以使用編號也可以使用別名;編號0代表整個匹配的子串;不填寫參數時,返回group(0);沒有截獲字符串的組返回None;截獲了多次的組返回最后一次截獲的子串。 - groups([default]):
以元組形式返回全部分組截獲的字符串。相當于調用group(1,2,…last)。default表示沒有截獲字符串的組以這個值替代,默認為None。 - groupdict([default]):
返回以有別名的組的別名為鍵、以該組截獲的子串為值的字典,沒有別名的組不包含在內。default含義同上。 - start([group]):
返回指定的組截獲的子串在string中的起始索引(子串第一個字符的索引)。group默認值為0。 - end([group]):
返回指定的組截獲的子串在string中的結束索引(子串最后一個字符的索引+1)。group默認值為0。 - span([group]):
返回(start(group), end(group))。 - expand(template):
將匹配到的分組代入template中然后返回。template中可以使用id或g、g引用分組,但不能使用編號0。id與g是等價的;但10將被認為是第10個分組,如果你想表達1之后是字符'0',只能使用g<1>0。
In [14]:
import re m = re.match(r'(w+) (w+)(?P<sign>.*)', 'hello AI職場技術分享!')print "m.string:", m.string print "m.re:", m.re print "m.pos:", m.pos print "m.endpos:", m.endpos print "m.lastindex:", m.lastindex print "m.lastgroup:", m.lastgroupprint "m.group(1,2):", m.group(1, 2) print "m.groups():", m.groups() print "m.groupdict():", m.groupdict() print "m.start(2):", m.start(2) print "m.end(2):", m.end(2) print "m.span(2):", m.span(2) print r"m.expand(r'2 13'):", m.expand(r'2 13') m.string: hello AI職場技術分享! m.re: <_sre.SRE_Pattern object at 0x10b111be0> m.pos: 0 m.endpos: 18 m.lastindex: 3 m.lastgroup: sign m.group(1,2): ('hello', 'hanxiaoyang') m.groups(): ('hello', 'hanxiaoyang', '!') m.groupdict(): {'sign': '!'} m.start(2): 6 m.end(2): 17 m.span(2): (6, 17) m.expand(r'2 13'): hanxiaoyang hello!總結
以上是生活随笔為你收集整理的dreamweaver 正则表达式为属性值加上双引号_Python正则表达式(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Studio 3T更改使用时间破解免费使
- 下一篇: 反斜杠转义mysql java_mysq