python正则表达式

使用re模块
建议使用Python的r前缀,就不用考虑转义的问题了

s = 'ABC\-001' 等同于 s = r'ABC-001'

1 .判断是否匹配:

>>> import re
>>> re.match(r'^\d{3}\-\d{3,8}$', '010-12345')
<_sre.SRE_Match object; span=(0, 9), match='010-12345'>
>>> re.match(r'^\d{3}\-\d{3,8}$', '010 12345'
>>> 
  • match()方法判断是否匹配,如果匹配成功,返回一个Match对象,否则返回None。
 #常用方式:
test = '用户输入的字符串'
if re.match(r'正则表达式', test):
     print('ok')
else: 
     print('failed')

2 .切分字符串:

>>> re.split(r'\s+', 'a b c')
['a', 'b', 'c']
>>> re.split(r'[\s\,]+', 'a,b, c d')
['a', 'b', 'c', 'd']

3 .分组:()表示要提取的分组

>>> m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
>>> m
<_sre.SRE_Match object; span=(0, 9), match='010-12345'>

>>> m.group(0)
'010-12345'
>>> m.group(1)
'010'
>>> m.group(2)
'12345'

如果正则表达式中定义了组,就可以在Match对象上用group()方法提取出子串来。
注意到group(0)永远是原始字符串,group(1)、group(2)……表示第1、2、……个子串。

4 .贪婪模式:
最后需要特别指出的是,正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符。举例如下,匹配出数字后面的0:

>>> re.match(r'^(\d+)(0*)$', '102300').groups()
('102300', '')

由于\d+采用贪婪匹配,直接把后面的0全部匹配了,结果0*只能匹配空字符串了。必须让\d+采用非贪婪匹配(也就是尽可能少匹配),才能把后面的0匹配出来,加个?就可以让\d+采用非贪婪匹配:

>>> re.match(r'^(\d+?)(0*)$', '102300').groups()('1023', '00')

你可能感兴趣的:(python正则表达式)