正規表示式以及group的用法
前言:這裡我只是整理了一些網上的例子,剛好能解決我的疑惑,順便也將學習成果記錄下來。
1、re.match函式
re.match 嘗試從字串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回none。
re.match(pattern, string, flags=0)
2、re.search方法
re.search 掃描整個字串並返回第一個成功的匹配。
re.search(pattern, string, flags=0)
re.match只匹配字串的開始,如果字串開始不符合正規表示式,則匹配失敗,函式返回None;而re.search匹配整個字串,直到找到一個匹配。
3、re.findall方法
在字串中找到正規表示式所匹配的所有子串,並返回一個列表,如果沒有找到匹配的,則返回空列表。再次強調是返回是列表,所以當用到findall時,一定注意是直接列印不出來的,要遍歷。
findall(string[, pos[, endpos]])
引數:
- string : 待匹配的字串。
- pos : 可選引數,指定字串的起始位置,預設為 0。
- endpos : 可選引數,指定字串的結束位置,預設為字串的長度。
import re
pattern = re.compile(r'\d+') # 查詢數字
result1 = pattern.findall('runoob 123 google 456')
result2 = pattern.findall('run88oob123google456', 0, 10)
print(result1)
print(result2)
結果:
['123', '456']
['88', '12']
4、group的方法
(這部分是轉載於:http://www.cnblogs.com/kaituorensheng/archive/2012/08/20/2648209.html)
正規表示式中,group()用來提出分組截獲的字串,()用來分組
import re
a = "123abc456"
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0) #123abc456,返回整體
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1) #123
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2) #abc
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3) #456
究其因
1. 正規表示式中的三組括號把匹配結果分成三組
- group() 同group(0)就是匹配正規表示式整體結果
- group(1) 列出第一個括號匹配部分,group(2) 列出第二個括號匹配部分,group(3) 列出第三個括號匹配部分。
2. 沒有匹配成功的,re.search()返回None
3. 當然正規表示式中沒有括號,group(1)肯定不對了。
4.1 match.group([group1,…])
import re
#定義了兩個group,因為包含兩個括號
m = re.match("(\w+) (\w+)", "Isaac Newton, physicist")
#group(0)就是匹配的整個結果
print(m.group(0)) #輸出結果為Isaac Newton
#group(1)是第一個group的值
print(m.group(1)) #輸出結果為Isaac
#group(2)是第二個group的值
print(m.group(2)) #輸出結果為Newton
#groups返回所有的group,以元組的形式
print(m.groups()) #輸出結果為('Isaac','Newton')
4.2findall(pattern, string, flag)
import re
if __name__ == '__main__':
#用於測試的字串
str = "<h1>liuwei</h1><a href='www.baidu.com'></a><h1>zhangbin</h1><a href='www.love.com'></a>"
regex = re.compile("<h1>(.+?)</h1><a(.+?)></a>") #定義了兩個group,兩個括號
res = regex.search(str) #search用於找到第一個滿足匹配的子串,並返回
print("group1:%s" %res.group(1)) #輸出結果為liuwei
print("group2:%s" %res.group(2)) #輸出結果為href='www.baidu.com'
res1 = regex.findall(str) #findall輸出所有滿足的匹配
print("res1:%s" %res1)
#輸出結果 [('liuwei', " href='www.baidu.com'"), ('zhangbin', " href='www.love.com'")]
print(res1[0]) #輸出結果為('liuwei', 'www.baidu.com')
print(res1[1]) #輸出結果為('zhangbin, 'www.love.com')
參考資料:
python基礎教程:http://www.runoob.com/python/python-reg-expressions.html
http://www.cnblogs.com/kaituorensheng/archive/2012/08/20/2648209.html
https://blog.csdn.net/jeryjeryjery/article/details/77196497
相關文章
- java正規表示式之 groupJava
- 正規表示式之Matcher類中group方法
- 正規表示式-問號的四種用法
- 正規表示式環視概念與用法分析
- 【正規表示式】常用的正規表示式(數字,漢字,字串,金額等的正規表示式)字串
- oracle正規表示式regexp_like的用法詳解Oracle
- Web 前端開發之js正規表示式用法Web前端JS
- 65條最常用正規表示式[附WPF用法]
- 正規表示式
- 正規表示式.
- Linux 的正規表示式Linux
- JS常用正規表示式及驗證時間的正規表示式JS
- 常用正規表示式
- JavaScript 正規表示式JavaScript
- MySQL正規表示式MySql
- 正規表示式(java)Java
- SQL正規表示式SQL
- python正規表示式Python
- 正規表示式合集
- 正規表示式(一)
- Python 正規表示式Python
- Python——正規表示式Python
- PHP正規表示式PHP
- 正規表示式概括
- javascript正規表示式JavaScript
- java正規表示式Java
- Shell正規表示式
- 正規表示式 教程
- 正規表示式 【四】
- 正規表示式匹配
- Python:正規表示式Python
- php –正規表示式PHP
- 【Linux】正規表示式Linux
- 【JavaScript】正規表示式JavaScript
- URL正規表示式
- 正規表示式 split()
- 初探正規表示式
- 正規表示式 test()