Python正则表达式

1. 元字符和语法

pattern match

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

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

3. 反斜杠的困扰

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

4. 匹配模式

flag是匹配模式,取值可以使用按位或运算符’|’表示同时生效,比如re.I | re.M。另外,你也可以在regex字符串中指定模式,比如re.compile(‘pattern’, re.I | re.M)与re.compile(‘(?im)pattern’)是等价的。
可选值有:
re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
M(MULTILINE): 多行模式,改变’^’和’$’的行为(参见上图)
S(DOTALL): 点任意匹配模式,改变’.’的行为
L(LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
U(UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
X(VERBOSE): 详细模式。

5. re.match函数

re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
re.match(pattern, string, flags=0)

#!/usr/bin/python3
import re
 
line = "Cats are smarter than dogs"
# .* 表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
 
if matchObj:
   print ("matchObj.group() : ", matchObj.group())
   print ("matchObj.group(1) : ", matchObj.group(1))
   print ("matchObj.group(2) : ", matchObj.group(2))
else:
   print ("No match!!")

这个方法用于查找字符串中可以匹配成功的子串

 pattern_str = r'.*' + key + r'\s*[,)]'
 match_obj = re.search(pattern_str, content)
 if match_obj:
     print(match_obj.group())

7. finditer

搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器。
能得到所有的能匹配到的,并且分组也正常

pattern_str = r'\s*\w+_(MSG|MESSAGE)\([^,;]*?printMsg\s*\(\s*' + key + r'\s*(,[^;]*)*\);'
match_obj = re.finditer(pattern_str, CONTENT, re.M | re.S)

not_matched = True
for m in match_obj:
    not_matched = False
    match_str = m.group().strip()
    match_arg = m.group(2)
    print('matched str in [%s]: \n%s' % (file_name, match_str))
    print('args of matched str in [%s]: \n%s' % (file_name, match_arg))
if not_matched:
    print("No match key: %s in the file [%s]" % (key, file_name))

Python3 正则表达式
Python正则表达式指南