使用形式化模式搜索和修改文本。python中正则表达式通过re模块使用语法以per语言语法为基础。
查找文本中的模式
re最常见的用法就是搜索文本中的模式。 search()函数取模式和要扫描的文本作为输入,如果找到这个模式则返回一个match对象。如果未找到模式,search()将返回None。
每个match对象包含有关匹配性质的性质的信息,包括原输入字符串,使用的正则表达式,以及模式在原字符串中出现的位置。
start()可以给出字符串中的相应索引,
end()方法给出字符串中的相应索引,指示与模式匹配的文本在字符串中出现位置
例如:
#!/usr/bin/env python
import re
pattern = 'this'
text = 'Does this text matcht the pattern?'
match = re.search(pattern,text)
s = match.start()
e = match.end()
print 'start in %s' % s
print 'end in %s' % e
print 'Found "%s"\nin "%s"\nfrom %d to %d ("%s")' % (match.re.pattern,match.string,s,e,text[s:e])
print text
print text[s:e]
re包含一些高级模块用于处理作为文本字符串的正则表达式,不过对于对于过程序频繁使用的表达式,编译这些表达式会更高效。compile()会把正则表达式编译成一个RegexObject对象如下:
search()用来查找字面量文本,字符串的单个实例
,findall()函数返回输入中与模式匹配而不重叠的所有子串。
可以使用5种方式表示重复,表示方法如下:
× 表示0次或多次
(允许一个模式重复0次,匹配不存在情况
- 表示至少匹配一次
? 表示0次或一次
{n} 表示出现指定的次数
{m,n} 表示至少出现m次,最多出现m次
[ab] 表示a或b
[^] 表示禁止查找相应字符
python中还可以使用转译 码,主要转译码如下:
\d 一个数字
\D 一个非数字
\s 一个空白符
\S 一个非空白符
\w 一个字母数字
\W 一个非字母数字
^ 字符串或行的开始
$ 字符菜或行的结束
\A 字符串开始
\Z 字符串结束
\b 一个单词开头或末尾的空串
\B 不再单词开头或结尾的空串
限制搜索
搜索可以使用re.match和re.search(),
re.match()
仅当搜索对象位于字符串最前面时才能有效识别,而search可以随时找到他。
用组解析匹配
使用group()可以得到某个组织的匹配,如果使用分组来查找字符串的各部分不过结果中并不需要某些与组匹配的部分,此时group()会很有用。
示例代码如下:
text = 'this is some text -- with punctuation.'
>>> print 'input text :', text
input text : this is some text -- with punctuation.
>>> regex = re.compile(r'(\bt\w+)\W+(\w+)')
>>> match = regex.search(text)
>>> print 'entire match :', match.group(0)
entire match : this is
>>> print 'entire match :', match.group(1)
entire match : this
>>> print 'entire match :', match.group(2)
entire match : is
>>> print 'entire match :', match.group(3)
entire match :
第0组表示与整个表达式匹配的字符串,子组按其左小括号在表达式中出现顺序重1开始标号。
分组可以设置一个名字称命名组语法:(?P<name>pattern)