首页  |  Linux  |  C/C++  |  网络编程  |  Python   |  Algorithm  |  数据库  |  经验  |   人生 & 随想   |  站内搜索  |  关于

<<< previous

该文已被浏览2030

Python:使用正则表达式(一)

2016-03-20

#1: 导入相关模块

在Python中,要使用正则表达式,就要用到 re 模块,因此在使用正则表达式之前需要首先导入该模块.
>>> import re

#2: 创建正则表达式对象

如果要在程序中多次使用同一个正则表达式的话,可以创建一个相应的正则表达式对象,这样可以提高使用效率.创建正则表达式对象,需要用到 re 模块中的 compile() 函数:
reobj = re.compile("regex pattern")

#3:设置正则表达式的选项

在Python中,可以通过下列常量来设置正则表达式的选项: 你可以将上述常量放到 re.compile() 函数的第二个可选参数处来设置,如果要同时设置多个选项,可以使用 | 符号来分隔多个选项:
import re
reobj = re.compile("regex pattern", 
                re.VERBOSE | re.IGNORECASE |
                re.DOTALL | re.MULTILINE)

#4: 检查是否可以在目标字符串中找到匹配

对于一次性的快速测试,可以直接使用全局函数 re.search():
import re
# string 为目标字符串
if re.search("regex pattern", string)
    # Successful match
else:
    # Match attempt failed
如果要在程序中多次使用同一个正则表达式,可以首先创建一个相应的正则表达式对象,之后调用该对象的 search() 函数:
import re
reobj = re.compile("regex pattern")
# string 为目标字符串
if reobj.search(string):
    # Successful match
else:
    # Match attempt failed

#5: 测试正则表达式能否完整匹配目标字符串

想要检查一个字符串是否整体符合某个特定模式,也就是说,想要检查包含该模式的正则表达式是否可以从头到尾匹配该字符串,此时就要用的 match() 函数了.
对于一次性的快速测试,可以直接使用全局函数 re.match():
import re
# string 表示目标字符串
if re.match(r"regex pattern\Z", string):
    # Successful match
else:
    # Match attempt failed
如果要在程序中多次使用同一个正则表达式,可以首先创建一个相应的正则表达式对象,之后调用该对象的 match() 函数:
import re
# string 表示目标字符串
reobj = re.compile(r"regex pattern\Z", string)
if reobj.match(string):
    # Successful match
else:
    # Match attempt failed
上面的程序中 \Z 匹配字符串的末尾,更多转义字符的含义可以查看 Python文档.

#6: 获取匹配文本

假设有一个可以匹配目标字符串一部分的正则表达式,现在想要把匹配的文本提取出来,可以使用 group() 函数.
对于一次性的快速测试,可以直接像下面这样做:
import re
# string 表示目标字符串
matchobj = re.search("regex pattern", string)
if matchobj:
    result = matchobj.group()
else:
    result = ''
如果要重复使用同一个正则表达式,最好使用编译好的对象:
import re
reobj = re.compile("regex pattern")
# string 表示目标字符串
matchobj = reobj.search(string)
if matchobj:
    result = matchobj.group()
else:
    result = ''

#7: 确定匹配的位置和长度

上面的例子是提取匹配的字串,如果想要确定该匹配的开始位置和长度,就要用到 start()end() 函数了.
对于一次性的快速测试,可以直接像下面这样做:
import re
# string 表示目标字符串
matchobj = re.search("regex pattern", string)
if matchobj:
    matchstart = matchobj.start()       
    matchlength = matchobj.end() - matchstart
如果要重复使用同一个正则表达式,最好使用编译好的对象:
import re
reobj = re.compile("regex pattern")
# string 表示目标字符串
matchobj = reobj.search(string)         
if matchobj:
    matchstart = matchobj.start()
    matchlength = matchobj.end() - matchstart
另外,可以通过给 start()end() 函数传递一个参数来获取正则表达式中的某个捕获分组匹配到的文本范围。调用 start(1) 可以得到第一个捕获分组的开始位置,而调用 end(2) 则会得到第二个分组的结束位置,以此类推。(第0个分组是完整的正则表达式匹配)

一如既往,如果你对文章中的内容有任何疑问,或者是发现文章中有任何错误,都可以通过下面的地址发邮件告诉我.
E-mail: rytubuntulinux@gmail.com