码迷,mamicode.com
首页 > 其他好文 > 详细

正则表达式的用法

时间:2015-03-20 23:17:46      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

http://blog.csdn.net/lxcnn/article/details/4268033

python:

python内嵌了正则表达式,在re模块中。

正则表达式的用途

1.测试字符串内的模式。(数据验证)

2.替换指定文本。

3.基于模式匹配从字符串中提取子字符串。

注意:

1.正则表达式模式被编译成一系列的字节码,然后由c编写的匹配引擎执行

2.并非所有的字符串处理都能用正则表达式完成

正则表达式的元字符

python的正则表达式前要加r的原因(当然也可以不加)

在Python的string前面加上‘r’, 是为了告诉编译器这个string是个raw string,不要转意backslash ‘\‘ 。 例如,\n 在raw string中,是两个字符,\和n, 而不会转意为换行符。由于正则表达式和 \ 会有冲突,因此,当一个字符串使用了正则表达式后,最好在前面加上‘r‘。

1. []

 -长用来指定一个字符集,在这个字符集中的一个可以拿来匹配:[abc]  [a-z]

-元字符在在字符集中不起作用

-在[]内用^表示补集,用来匹配不在区间范围内的字符

s=r‘aba‘ 匹配abc
s=r‘t[io]p‘ 匹配tip或者top
s=r‘t[a-z0-9A-Z]‘匹配t+0-9或者a-z或者A-Z
import re
#定义正则
s=raba
print(re.findall(s,"ababababa"))

2.^ ,$

^表示匹配开头,放在字符串的前面,$表示匹配结尾,放在字符串的尾部

s=r‘^he‘ 匹配行首的he

s=r‘boy$‘ 匹配行尾boy

s=r‘t[abc^]‘  匹配ta或者tb或者tc或者t^, 这时^只是一个普通字符

s=r‘t[abc$]‘  这时$也只是一个普通的字符

re.findall(r‘^he‘,‘aa\nhe‘) 结果为空(一个串里面不算换行??)

re.findall(r‘he$‘,‘2s‘+‘he‘) 得到he

print(re.findall(r‘^abc‘,‘^abc‘)) 结果为空,此时^作为元字符处理

那么怎样匹配^abc呢?print(re.findall(r‘\^abc‘,‘^abc‘));

3. \

-反斜杠后面加不同的字符以表示不同特殊意义

 \d 数字 相当于[0-9]

 \D 非数字  [^0-9]

 \s 空白字符 [\t\n\r\f\v]

 \S 非空白符 [^\t\n\r\f\v]

 \w 字母数字下划线 [a-zA-Z0-9_]

 \W 非字母数字下划线 [^a-zA-Z0-9_]

-用于取消元字符: \[ 或者 \\等

4.* , + ,?, {}

*作用是将前面的字符重复零到多次,最多20亿,0次就是没有

+ 表示将前面的字符重复一次到多次

? 表示将前面的字符重复零次到一次。 加在*或者+后面 表示最小匹配(默认是最大匹配)

{} {}里面有一个数字n,表示重复n次,{}里面有两个数字m, n 表示重复m到n次

print(re.findall(r‘ab+‘,‘abbbbbbb‘)) 最大匹配

print(re.findall(r‘ab+?‘,‘abbbbbbb‘)) 最小匹配

s=r‘^010-\d*8‘ 表示010-零个或多个数字并且以8结尾

s=r‘^010-\d{8}$‘ 表示010-正好8个数字

如匹配电话号码要求以010为开头中间一个 - ,后面是8位数字

s=r‘^010-\d\d\d\d\d\d\d\d‘

s=r‘^010-\d{8}‘ 花括号里面的数组表示重复次数,与上面等价

s=r‘^010-?\d{8,10}$ 表示该串必须以010-开头,以8或9或10个数字结尾

print(re.findall(r‘^010-?\d{8,10}‘,‘010-123456789012‘)) 最大匹配,末尾取到10个

print(re.findall(r‘^010-?\d{8,10}?‘,‘010-123456789012‘)) 最小匹配,末尾取到8个

 

正则的编译

如果re的使用此时比较多,需呀进行正则的编译:

import re
r1=r\d{3,4}-?\d{8}$
print(re.findall(r1,010-12345678))
#编译后的匹配速度要快很多
phone_tel=re.compile(r1)
print(phone_tel.findall(010-12345678))

 

r1=re.compile(r‘\\seven‘)
print(r1.findall(‘\seven‘))

如果不加r的话\s 还是会被转意!

正则的编译属性

不区分大小写:re.I

abcd_re=re.compile(r‘[aA][bB][cC][dD]‘)
abcd_re2=re.compile(r‘abcd‘,re.I)
print(abcd_re.findall(‘aBCd‘))
print(abcd_re2.findall(‘AbCd‘))

 

28-6.50

 

正则表达式的用法

标签:

原文地址:http://www.cnblogs.com/kylehz/p/4354068.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!