python正则表达式

正则表达式
^行首锚定 $行尾锚定
.匹配任意字符一次
\w匹配非空白字符一次
\s匹配空白字符一次
\d匹配数字一次
*表示前面的正则表达式会重复0到多次
+匹配前面的字符重复0到多次
.+ 相当于匹配多次任意字符,至少一次
\w+相当于匹配非空字符一到多次
?前面的字符匹配一次或不匹配

有一个上面两种类似的{}表示前面的字符出现次数
{1,}相当于+ {0,1}相当于? {n}重复n次 {m,n}重复m到n次
{0,}不相当于* ,因为它匹配到的多个字符必需是重复的

\b匹配边界 边界指的是匹配的一边是空格或换行(制表符也是空格)另一边不是空格或换行
‘ {1,}\bab’ 比配ab前面至少一个空格 ‘\bc’匹配字符c前面是个空格或换行

多个符号联合使用,匹配一般都是尽可能多的匹配(对*而言)
匹配是从前往后开始匹配,一段满足会打印后再从当前位置开始继续
a.b.*ab 匹配 ‘ adb erabqw ab’会取到’adb erabqw ab’
贪婪模式与非贪婪模式,这个都是针对重复匹配的符号而言的
*尽可能多的匹配字符,.*尽可能多的匹配任意字符,非贪婪模式*?可以匹配前面字符任意次,但尽量少的匹配
+尽可能多匹配前面的字符或表达式,至少一次,非贪婪模式+?匹配前面字符字少一次,但匹配次数要满足后面的条件就截止了
?匹配0次或者一次,非贪婪模式??能不匹配前面的字符就不匹配(匹配也只能匹配一次)这个的非贪婪模式实际用处不大
{n,}匹配前面的字符尽可能多次,且不少于n次,非贪婪模式{n,}?匹配前面字符至少n次,但满足了后面的匹配条件了就截止
{n,m}匹配前面字符n次到m次,但尽量多的匹配,非贪婪模式{n,m}?匹配前面的字符n到m次,但尽量少的匹配

其他标识符
\B 匹配不是边界,本身不占字符 t\B匹配t的后面不是边界(空格) \Bt匹配t的前面不是边界
i\Bt 相当于匹配 it i\B t 不可能匹配得到
\D 匹配非数字
\S匹配非空白字符
\W匹配\w外的字符

[]匹配字符之一 [abc] [0b]

结构符号
‘|’ 或者符号
分组
(pattern)表达式\1 表示重复匹配前面的内容 1为默认的分组号
python中 (?P<name>exp) 分组捕获,但是可以通过name访问

断言
表达式(?=exp) 断言表达式右边出现exp
(?<=exp)表达式 断言表达式左边有exp
(?!exp) (?<!exp)

 

正则表达式使用
模块 re
类方法 result =re.match() re.search() re.fullmatch() re.findall() re.finditer() .split() .groud .sub()
对象方法 对re类的对象使用 regex =re.compile(‘正则表达式’)
result= regex.match() regex.search() regex.fullmatch()
regex.findall() regex.finditer()
它们的方法大部分都公有,使用后的执行效果也差不多,有的可能用的很少占不列出

匹配模式 re.M多行模式 re.S依然从头开始找(默认模式)

类方法 result =re.func(‘正则表达式’,待匹配的字符串,[匹配模式])

对象方法 regex =re.compile(‘正则表达式’,[匹配模式])生成对象
result =func(待匹配的字符串)

re.match(‘b’,s) 默认从索引0开始匹配s,没有匹配到返回空,无法设置
打印result值 <_sre.SRE_Match object; span=(0, 1), match=’b’>
re.compile(‘b’) 设置从索引10,开始匹配,返回值一样
match(s)

re.search(‘b’,s) 从0开始匹配到第一个满足表达式,返回与match类似,对象方法可以设置起始索引
<_sre.SRE_Match object; span=(8, 9), match=’a’>
search(s,10)

re.fullmatch() 全长匹配

regex.fullmatch(s,4,5) 匹配区间全长匹配

re.findall(‘正则’,s) regex.findall(s) 返回多次match匹配的结果的列表

re.finditer(‘正则’,s) regex.finditer(s) 返回迭代器, 迭代后返回match的对象

re.match() .split() .sub

 

匹配电子邮箱
^\w[\w\.-]+@\w[\w\.-]+\.[a-zA-Z]+

匹配html标记
<a[^<>]*href=[“‘]?([^”‘]+)[“‘]?[^<>]*>

匹配URL
(\w+)://([\S]+)

切割文本单词
lst =re.split(‘[^-\w]+’,s)

d =defaultdict(lambda :0)
for line in f:
for sub in re.split(‘[^-\w]+’,line):
if len(sub) >0:
d[sub] +=1

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/88246

(0)
上一篇 2017-11-06 20:38
下一篇 2017-11-07 15:02

相关推荐

  • Python高阶函数及装饰器

    First Class Object 函数在Python中是一等公民 函数也是对象,可调用的对象 函数可作为普通变量、参数、返回值等 高阶函数 数学定义:y=g(f(x)) 高阶函数需满足的条件,至少其一 接受一个或多个函数作为参数 输出一个函数 内建函数的高阶函数 排序:sorted(iterable[,key][,reverse]) 返回一个新列表,对一…

    2018-04-22
  • IPython封装解构和集合

    IPython Shell命令 !command 执行shell命令 !ls -l , !touch a.txt file = !ls -l | grep py 魔术方法 使用%开头的,IPython内置的特殊方法 %magic 格式 %开头是line magic %% 开头是cell magic,notebook的cell %alias 定义一个系统命令的…

    Python笔记 2018-03-31
  • 元组冒泡法及字符串处理

    tuple buble string

    2017-09-23
  • Python基础练习之set/dict练习

    1.用户输入一个数字 打印每一位数字及其重复的次数 (1)字符串练习2用的方法 while True: num = input().strip().lstrip(‘0’) if num.isdigit(): break count = [0] * 10 for j in num: x = int(j) if count[x] == 0: count[x] =…

    2017-10-09
  • Python函数式编程指南(三):迭代器

    这一篇我们将讨论迭代器。迭代器并不是函数式编程特有的东西,但它仍然是函数式编程的一个重要的组成部分,或者说是一个重要的工具。 转载请注明原作者和原文地址:) 3. 迭代器 3.1. 迭代器(Iterator)概述 迭代器是访问集合内元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素都被访问一遍后结束。 迭代器不能回退,只能往前进行迭代。这并…

    Linux干货 2015-03-11
  • 调试你的Python代码

    调试你的Python代码 译自: http://howchoo.com/g/zgi2y2iwyze/debugging-your-python-code 作者: Ashley     当你不得不更新别人的代码时,你有多少次陷入这样一种境地?如果你是一个开发团队的一员,那我猜一定多于你愿意的次数。 结果我们发现Pytho…

    Python干货 2015-03-23