python--正则表达式学习汇总

(感谢原作者的辛勤劳作~)本文正文大部分转载自http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html

1. 正则表达式基础

1.1.概念介绍

正则表达式是用于处理字符串的强大工具,它并不是Python的一部分。
其他编程语言中也有正则表达式的概念,区别只在于不同的编程语言实现支持的语法数量不同。
它拥有自己独特的语法以及一个独立的处理引擎,在提供了正则表达式的语言里,正则表达式的语法都是一样的。
下图展示了使用正则表达式进行匹配的流程:
python--正则表达式学习汇总_第1张图片
正则表达式的大致匹配过程是:

1.依次拿出表达式和文本中的字符比较,
2.如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。
3.如果表达式中有量词或边界,这个过程会稍微有一些不同。

python--正则表达式学习汇总_第2张图片

1.2. 数量词的贪婪模式与非贪婪模式

正则表达式通常用于在文本中查找匹配的字符串。
Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;非贪婪的则相反,总是尝试匹配尽可能少的字符。
例如:正则表达式”ab*”如果用于查找”abbbc”,将找到”abbb”。而如果使用非贪婪的数量词”ab*?”,将找到”a”。

1.3. 反斜杠的困扰

与大多数编程语言相同,正则表达式里使用”\”作为转义字符,这就可能造成反斜杠困扰。
假如你需要匹配文本中的字符”\”,那么使用编程语言表示的正则表达式里将需要4个反斜杠”\\”:前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。
Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r”\”表示。同样,匹配一个数字的”\d”可以写成r”\d”。有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。

1.4. 匹配模式

正则表达式提供了一些可用的匹配模式,比如忽略大小写、多行匹配等,这部分内容将在Pattern类的工厂方法re.compile(pattern[, flags])中一起介绍。

2. re模块

2.1. 开始使用re

Python通过re模块提供对正则表达式的支持。使用re的一般步骤是先将正则表达式的字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果(一个Match实例),最后使用Match实例获得信息,进行其他的操作。

以下是用re模块做的几个模式匹配例子:

def do_re(pattern, str, method):
    m = None
    if method == "match":
        print "method is match."
        m = re.match(pattern, str)
    elif method == "search":
        print "method is search."
        m = re.search(pattern, str)

    if m is not None:
        return m.group()
    return None

if __name__ == "__main__":
    # 模式匹配"bat"、"bit"、"but"、"hat"、"hit"、"hut"、
    pattern_1 = "([bh][aiu]t)"
    # 模式匹配一个空格分隔的任意一对单词,比如名和姓
    pattern_2 = "[A-Za-z]+\s[A-Za-z]+"
    # 匹配所有合法的python标识符
    pattern_4 = "^[_A-Za-z][_\w]+"
    # 模式匹配以www开头,常见域名结尾的web域名
    pattern_6 = "^[w]{3}\.\w\.(com|edu|net|cn|gov)$"

    print do_re(pattern_6, "www.user1234561.cn", "match")

你可能感兴趣的:(python)