1. 在Python中,所有和正则表达式相关的功能都包含在re模块中。
2. 字符"$"表示“字符串的末尾”,如:"ROAD$"则表示:只有当"ROAD"出现在一个字符串的尾部时才会匹配。
3. 字符"^"表示“字符中的开始”,如:"^ROAD"则表示:只有当"ROAD"出现在一个字符串的头部时才会匹配。
4. 利用re.sub函数对字符串进行搜索。
5. 字符"/b"表示“单词的边界必须在这里”;如:"/bROAD", "ROAD/b", "/bROAD/b"
6. re模块的关键是一个search函数,该函数有两个参数,一个是正则表达式,一个是字符串,函数试图匹配正则表达式。如果发现一个匹配,search函数返回一个拥有多种方法可以描述这个匹配的对象;如果没有发现匹配,search函数返回一个None,一个Python空值(null value)。
7. {n,m}语法:
如果在正则表达式中使用{n,m}语法,我们则可以允许使前面匹配的字符迭代出现。
C{0,3} - 表示在字符串中可以出现0到3个C。 '', 'C', 'CC', 'CCC'都可以匹配此正则表达式
C{3} - 则表示字符串一定要包含3个C。'CCC'是匹配正则表达式的,而且'', 'C', 'CC'则不匹配正则表达式。
8. 松散正则表达式
在Python中的一个特殊的特性就是允许用户使用松散正则表达式。一个松散正则表达式和一个紧凑正则表达式主要区别表现在两个方面:
- 忽略空白符。空格符,制表符,回车符不匹配它们自身,它们根本不参与匹配。
- 忽略注释。在松散正则表达式中的注释和在普通Python代码中的一样。
记录一个松散正则表达式的例子:
>>> pattern = """
^ # beginning of string
M{0,3} # thousands - 0 to 3 M's
(CM|CD|D?C{0,3}) # hundreds - 900 (CM), 400 (CD), 0-300 (0 to 3 C's),
# or 500-800 (D, followed by 0 to 3 C's)
(XC|XL|L?X{0,3}) # tens - 90 (XC), 40 (XL), 0-30 (0 to 3 X's),
# or 50-80 (L, followed by 0 to 3 X's)
(IX|IV|V?I{0,3}) # ones - 9 (IX), 4 (IV), 0-3 (0 to 3 I's),
# or 5-8 (V, followed by 0 to 3 I's)
$ # end of string
"""
>>> re.search(pattern, 'M', re.VERBOSE)
Python输出结果:<_sre.SRE_Match object at 0x008EEB48>
9. 应该熟悉正则表达式的一些技巧:
- ^ 匹配字符串的开始。
- $ 匹配字符串的结尾。
- /b 匹配一个单词的边界。
- /d 匹配任意数字。
- /D 匹配任意非数字符。
- x? 匹配一个可选的 x 字符(换言之,它匹配1 次或者0 次x 字符 )。
- x* 匹配匹配0次或者多次x 字符。
- x+ 匹配匹配1次或者多次x 字符。
- x{n,m} 匹配x 字符,至少n 次,至多m 次。
- (a|b|c) 要么匹配a,要么匹配b,要么匹配c。
- (x) 一般情况下表示个记忆组(remembered group)。你可以利用re.search 函数返回对象的groups() 函数获取它的值。