python 正則表達式sub函數和正則匹配對象Match Objects

1、正則匹配中的「組(group)」的概念.html

        當re模塊中的函數,找到匹配項的時候,返回MatchObject對象。這些對象包括匹配模式的子字符串的信息。它們還包含錄哪一個模式匹配了子字符串那部分的信息,這些部分就是不一樣的「組」。python

        組就是放在圓括號內的子模式。組的序號取決於在它的左側的括號的數量,組0就是整個模式,例:       git

'Django (is a( nice web)) (framework).'

包含如下幾個模式:
0 Django is a nice web framework.
1 is a nice web
2 nice web
3 framework


>>> pat = re.compile(r'Django (is a (nice web)) (framework)')
>>> m = pat.match("Django is a nice web framework")
>>> m
<_sre.SRE_Match object; span=(0, 30), match='Django is a nice web framework'>
>>> m.groups()
('is a nice web', 'nice web', 'framework')
>>> m.group(0)
'Django is a nice web framework'
>>> m.group(1)
'is a nice web'
>>> m.group(2)
'nice web'
>>> m.group(3)
'framework'
>>> m.group(4)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
    m.group(4)
IndexError: no such group

2、正則表達式sub方法。web

    sub是模塊函數也是re對象的方法。正則表達式

   模塊函數原型:re.sub(pattern, repl, string, count=0, flags=0)django

   類方法原型: regex.sub(repl, string, count=0)函數

    repl能夠是函數能夠是字符串。測試

    一、repl爲字符串url

import re

text = "hello! {name},{name},{name}"

pat2 = re.compile(r"{name}")

bar = pat2.sub("xiao", text)

print(bar)


➜  python3 python3 re_test.py
hello! xiao,xiao,xiao

    二、repel在字符串中使用反向引用(反斜槓替換)(Backreferences):   spa

import re

pat3 = re.compile(r"{(.+)}")

foo = pat3.sub(r"<html>\1</html>", "{title}")
print(foo)

➜  python3 python3 re_test.py
<html>title</html>

    其中repel中的"\1"是反向引用group 1的內容。這裏測試如下不能使用"\0",使用會返回一個空值,暫時我給不出很好的解釋,回頭填這個坑。

    三、repel爲函數的時候,repel的函數回獲取一個MatchObjects做爲其參數。

import re

def foo(arg):    
    
    return str(arg.groups())

pat3 = re.compile(r"{(.+)}")

bar = pat3.sub(foo, "{title}")

print(bar)

➜  python3 python3 re_test.py
('title',)

3、正則匹配對象MatchObjects

    這裏只記一個方法match.groupdict.

    能夠用字字符串爲沒有組命名。命名方式是:       

    (?P<name>mode)

    這樣這個這子模式就被命名爲name,django中使用正則來匹配url,這個中給子模式命名方式會使用到,很方便。

import re 
pat4 = re.compile(r"<p>(?P<text>.+)</p>")

m = pat4.search("<p>My first paragraph.</p>")


print(m.groupdict())

➜  re_blog git:(master) ✗ python3 re_test.py
{'text': 'My first paragraph.'}
相關文章
相關標籤/搜索