python 正则表达式

常用re模块的表示方式

字符

  \d  匹配数字

  \D  匹配非数字

  \s  匹配空白符

  .   匹配除换行符以外的所有字符

  \b  匹配单词的开始后者结束

  \w  匹配字母或数字或下划线或汉字

  ^  匹配字符的开始

  $  匹配字符的结束

 

次数

  *  匹配零次至无限次

  +  匹配一次至无限次

  ?  匹配零次至一次

  {n} 匹配n次

  {n,} 匹配n次之无限次

  {n,m}  匹配n次至m次

常用5种方法:match, search, findall,split,sub,

 

match

  match(pattern, string, flags=0)

  从开始位置开始匹配,成功返回一个对象,未匹配返回None

import re
a = "asdsfsfhaj67772hhsdja"
result1 = re.match("as\w?", a)
print(result1.group())
result2 = re.match("(a)(s)\w?", a)
print(result2.groups())
result3 = re.match("(?P<n1>a)(?P<n2>s)\w?", a)
print(result3.groupdict())

运行结果:
asd
('a', 's')
{'n2': 's', 'n1': 'a'}

 

search

  search(pattern, string, flags=0)

  浏览整个字符匹配第一个,未匹配返回None,(用法跟match出不多)

  

import re
a = "sdsfsfhasj67772hhsdja"
result1 = re.search("as\w?", a)
print(result1.group())
result2 = re.search("(a)s\w?", a)
print(result2.groups())
result3 = re.search("(?P<n1>a)(?P<n2>s)\w?", a)
print(result3.groupdict())


结果:
asj
('a',)
{'n2': 's', 'n1': 'a'}

 

findall

  findall(pattern, string, flags=0)

  获取非重复的匹配列表;如果有一个组则以列表形式返回,且每一个匹配均是字符串;如果模型中有多个组,则以列表形式返回,且每一个匹配均是元祖;

空的匹配也会包含在结果中
  
import re
a = "asdsfsfhasj67772hhasysdja"
#无分组
result1 = re.findall("as\w?", a)
print(result1)
#有分组
result2 = re.findall("a(s)(\w)s",a)
print(result2)


结果:
['asd', 'asj', 'asy']
[('s', 'd'), ('s', 'y')]

 

sub

  替换匹配成功的字符串

  sub(pattern, repl, string, count=0, flags=0)

  pattern: 正则模型
  repl   : 要替换的字符串或可执行对象
  string : 要匹配的字符串
  count  : 指定匹配个数
  flags  : 匹配模式

  

import re
a = "i like coding"
result = re.sub("like", "love", a)
print(result)


结果:
i love coding

 

split

  根据正则匹配分割字符串    (可以用来写简单的计算器)

  split(pattern, string, maxsplit=0, flags=0)

  pattern: 正则模型
  string : 要匹配的字符串
  maxsplit:指定分割个数
  flags  : 匹配模式
 
import re
a = "y like coding"
result = re.split("i", a)
print(result)

结果:
['y l', 'ke cod', 'ng']

  正则表达式的另一种方法

  regex = re.compile(pattern, flags=0)

  

 

posted @ 2017-03-22 16:54  君何在  阅读(163)  评论(0编辑  收藏  举报