- 论坛徽章:
- 0
|
本帖最后由 中关村村草 于 2011-02-10 10:28 编辑
转:blue_halo
python中的正则
概括:
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}是错误的写法。
在以上的数量修饰符的最后再加一个?就是尽可能的少匹配。
四、举例
Python代码- 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直接返回匹配的字符串列表
复制代码 五、附加选项
Python代码- 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等匹配本地字符集
复制代码 |
|