概括:
python使用re正则模块来实现正则表达式,import re。
元字符含义:
一、字符串里含有什么字符
1、首先确定一下元字符(不是代表字面意思的字符)有哪些。
\ 代表转义
| 代表分支选择
( ) 代表捕捉
[ ] 代表字符数组
] 比较特殊,只有前面有相应的[ 和 { 时,才会是元字符,否则就是普通字符。()没有使用此规则
^ $ #行首,行尾
* + ? #代表数量
. #代表任意字符
2、单个字符的描述
除了在上面提到的元字符,想要匹配什么字符直接写就可以了,例如'a' 匹配 正则表达式 a。
而要想匹配元字符本身只需要在前面加上转义字符(\)就可以了。
3、非打印字符及某类字符的表示
非打印字符和标准的基本一直,列举如下:
\d 匹配任何数字,等同于[0-9],注意这里的-只有在字符数组里才是元字符。
\D 匹配任何非数字,等同于[^0-9]。
\s 匹配任何空白字符,等同于[\f\t\n\r ]
\S 匹配任何非空白字符,等同于[^\f\t\n\r ]
\t 匹配tab
\w 匹配任何字母数字或者下划线
\W 匹配上面以外的
二、字符串的位置
1、基本位置描述符
^ 匹配字符串的起始位置
\A 匹配字符串的起始位置
$ 匹配字符串结束位置。
\Z 匹配字符串的结束位置。
\b 匹配单词边界。
(?#) 注释
(?=) 匹配一个正则位置
(?!) 不匹配一个正则位置
三、字符串里字符的数量
* 0次或者多次 (尽可能的多匹配)
? 0次或者1次 (尽可能的多匹配)
+ 1次或者多次 (尽可能的多匹配)
{n} n次
{m,n} m次到n次
{m,} m次以上 注意 {,n}是错误的写法。
在以上的数量修饰符的最后再加一个?就是尽可能的少匹配。
四、举例
import re
if re.match(r"\d+","a99b"): #match必须是从头匹配
print "match ok!"
if re.search(r"\d+","a99b"):
print "search ok!"
print re.search(r"\d+","a99b").group() #group返回匹配的字符串
print re.search(r"(\d+)(\w)","a99b98c").groups() #返回子组字符串
print re.findall(r"\d+","a99b88c") #findall直接返回匹配的字符串列表
print re.sub(r"\d+","num","a99b88c") #把99 和 88 都替换成num
五、附加选项
import re
if re.match(r"a","A"):
print "test1 ok"
if re.match(r"(?i)a","A"): #附加选项必须在正则表达式最前面(?i)代表忽略大小写,对应re.I
print "test2 ok"
#ma=re.compile("a",re.I)
#if ma.match("A"):
# print "good!"
if re.search(r"^\d","abcd\n1234"): #\A,\Z只匹配字符串的开头和结尾,不受(?m)的影响
print "test3 ok"
if re.search(r"(?m)^\d","abcd\n1234"): #每一行的开头和结尾都认为是字符串的开始和结尾,对应re.M
print "test4 ok"
print re.search(r".+","abcd\nefg").group() #输出abcd
print re.search(r"(?s).+","abcd\nefg").group() #输出abcd\nefg,对应re.S
if re.match(r"\w","我"):
print "test5 ok"
if re.match(r"(?u)\w","我"): #匹配unicode,对应re.U
print "test6 ok"
#(?x),re.X 对应可以在正则中插入空白符
#(?L),re.L 对应\w等匹配本地字符集