Pytho正则表达式-match
代碼:
#!/usr/bin/python
import re
line = "Cats are smarter than dogs"
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
if matchObj:
print "matchObj.group() : ", matchObj.group()
print "matchObj.group(1) : ", matchObj.group(1)
print "matchObj.group(2) : ", matchObj.group(2)
else:
print "No match!!"
以上實(shí)例執(zhí)行結(jié)果如下:
matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter
主要解釋下 ?r'(.*) are (.*?) .*'
首先,這是一個(gè)字符串,前面的一個(gè)r表示字符串為非轉(zhuǎn)義的原始字符串,讓編譯器忽略反斜杠,也就是忽略轉(zhuǎn)義字符。但是這個(gè)字符串里沒有反斜杠,所以這個(gè)r可有可無。
(.*) 第一個(gè)匹配分組, ? .* ?代表匹配除換行符之外的所有字符,即任意字符即可
(.*?)第二個(gè)匹配分組,.*?后面多個(gè)問號(hào),代表非貪婪模式,也就是說只匹配符合條件的最少字符
后面的一個(gè).* ?沒有括號(hào)包圍,所以不是分組,匹配效果和第一個(gè)一樣,但是不計(jì)入匹配結(jié)果中,只有加括號(hào)的才會(huì)返回到匹配結(jié)果中
matchObj.group() 等同于?matchObj.group(0),表示匹配到的完整文本字符
matchObj.group(1) 得到第一組匹配結(jié)果,也就是(.*)匹配到的
matchObj.group(2) 得到第二組匹配結(jié)果,也就是(.*?)匹配到的
這里對(duì)新手還有個(gè)問題,matchObj.group(3)會(huì)報(bào)錯(cuò),因?yàn)橹挥衅ヅ浣Y(jié)果中只有兩組,所以填3時(shí)會(huì)報(bào)錯(cuò)。
下面是修改后的代碼 ?,一看便懂
#!/usr/bin/python import re line = "Cats are smarter than dogs hahaha" matchObj = re.match(r'(.*) are (.*?) than (.*) ha', line, re.M | re.I) if matchObj:print "matchObj.group() : ", matchObj.group()print "matchObj.group(1) : ", matchObj.group(1)print "matchObj.group(2) : ", matchObj.group(2)print "matchObj.group(3) : ", matchObj.group(3) else:print "No match!!"
結(jié)果:
D:\python\python.exe D:/pycharm/workspace/test01.py
matchObj.group() : ?Cats are smarter than dogs ha
matchObj.group(1) : ?Cats
matchObj.group(2) : ?smarter
matchObj.group(3) : ?dogs
總結(jié)
以上是生活随笔為你收集整理的Pytho正则表达式-match的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 聊聊自己的高效学习方法~
- 下一篇: 武汉火神山医院正式交付,华为提供多项技术