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.'}
相关文章
相关标签/搜索