您的位置:首页 > 编程语言 > Python开发

python -正则表达式

2016-07-01 12:42 387 查看
# Python - 正则表达式
'''
\d 可以匹配一个数字
\w 可以匹配一个祖母或者数字
: '00\d' 可以匹配 '007' 无法匹配 '00w'
:  '\d\d\d' 可以匹配 '101'
:  '\w\w\w' 可以匹配 'pyt'

. 可以匹配任意字符串
:  'py.' 可以匹配'pyc' 'python'

要匹配变长的字符,用 * 表示任意个字符(包括0个), 用+ 表示至少一个 ,? 表示0或1个 ,{n} 表示n个,{n-m} 表示n-m个
: \d{3}\s+\d{3-8}
\d{3} 表示要匹配3个数字
\s可以匹配一个空格 \s+ 表示至少要一个空格
\d{3-8} 表示3-8个数字

进阶:

要做精确的匹配, 可以用[]
:[0-9a-zA-Z\_] 可以匹配一个数字或者字母或者下划线
:[0-9a-zA-Z\_]+ 至少匹配一个数字或者字母或者下划线
:[a-zA-Z\_][0-9a-zA-Z\_]{0, 19}更精确地限制了变量的长度是1-20个字符(前面1个字符+后面最多19个字符)。
A|B 可以匹配 A或B
^表示行的开头,^\d表示必须以数字开头
$表示行的结束,\d$表示必须以数字结束

注意 :强烈建议使用python 的r前缀 , 就不用考虑转义的问题
'''
import re
re.match(r'^\d{3}\-\d{3,8}$', '010-12345')
<_sre.SRE_Match object at 0x1026e18b8>
re.match(r'^\d{3}\-\d{3,8}$', '010 12345')
'''
match()方法判断是否匹配,如果匹配成功,返回一个Match对象,否则返回None。常见的判断方法就是:
'''
test = '用户输入的字符串'
if re.match(r'正则表达式', test):
print 'ok'
else:
print 'failed'

# 字符串切割
import re
re.split(r'\s+' , 'a b c de')
['a', 'b', 'c', 'de']
re.split(r'[\s\,\;]+' , 'a,b;; c  d')
['a', 'b', 'c', 'd']

# 分组
'''
用() 表示出要提取的分组
group(0) : 原始字符串
group(1) group(2) ... : 分别表示第 1,2,3, .. 个子串
'''
m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
m.group(0)
'010-12345'
m.group(1)
'010'
m.group(2)
'12345'
# eg:
t = '19:05:30'
m= re.match(r'^(0[0-9]|1[0-9]|2[0-3]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]|[0-9])$',t)
m.group(0)
'19:05:30'
m.group(1)
'19'
m.group(2)
'05'
m.group(3)
'30'

>>> # 贪婪匹配

>>> #编译
'''
当我们在Python中使用正则表达式时 , re模块内部会干两件事:
1.编译正则表达式
2.用编译后的正则表达式去匹配字符串
如果一个正则表达式要重复使用千次,处于效率的考虑,我们可以预编译该正则表达式 .. 接下来直接匹配
'''

re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$')
re_telephone.match('010-12345').groups()
('010', '12345')
re_telephone.match('010-8086').groups()
('010', '8086')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: