标签:
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=r‘aba‘ 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