Python入门(五)--- 正则表达式,正侧陷阱,特殊字符,re模块

云计算学习day35

回顾

1 函数的参数

形参

  • 位置参数
  • 默认参数
def foo(x, y=10):
    pass
x :形参
y : 默认参数 ( 有默认值)
  • 实参
    • 位置参数
    • 关键字参数
foo(1, 3)
foo(y=3, x=5)

万能参数/ 可变长参数
*args # () 接收 位置参数
**kwargs # {} 接受 关键字参数

2 函数返回值

所有函数都有返回值: 默认是 None
可以通过 return 指定返回的数据

返回的数据可以是零到多个任意的 Python 数据对象

3 格式化输出

%

'{}'.format()

name="shark"
f'{name}'

shell 命令中的 printf

In [3]: d = {'a': '1','b':'2'}

In [4]: d
Out[4]: {'a': '1', 'b': '2'}

In [5]: s = '''A:10
   ...: B:20
   ...: C:30'''

In [6]: dd = {}

In [8]: for line in s.splitlines():
   ...:     k, v = line.split(':')
   ...:     k = k.lower()
   ...:     if k in d:
   ...:         new_k = d[k]
   ...:         dd[new_k] = v
   ...:         print(dd)
   ...: 
{'1': '10'}
{'1': '10', '2': '20'}

正则表达式

一、预备知识正则
1. 正则介绍

Python 中的正则,本质上是嵌入在Python中的一种微小的、高度专业化的编程语言,可通过 re 这个内置模块获得。
正则表达式模式几乎和 shell 中的一样,更接近 grep -P 的效果,因为 Python 中的 re 模块提供的是类似 Perl 语言中的正则表达式。
正则表达式模式会被编译成一系列字节码,然后由用 C 编写的匹配引擎执行。

2. 陷阱
友情提示:

正则表达式语言相对较小且受限制,因此并非所有可能的字符串处理任务都可以使用正则表达式完成。

还有一些任务 可以 用正则表达式完成,但表达式变得非常复杂。 在这些情况下,你最好编写 Python 代码来进行处理;虽然 Python 代码比精心设计的正则表达式慢,但它也可能更容易理解。

3. 特殊的字符

在 Python 中有一些特殊的字符,在正则表达式模式中的作用和 shell 和 grep -P 时候有一些细微的差别

正则特殊字符匹配内容
\w匹配单个字母、数字、汉字(shell中没有)或下划线 类似于 [a-zA-Z0-9_]
\d匹配单个数字 类似于 [0-9]
\s匹配单个任意的空白符,这等价于 [ \t\n\r\f\v]
\S匹配任何非空白字符, [ \t\n\r\f\v]
二、 re 模块的方法

其实,前面在 shell 中我们已经学习正则,这里我们主要学习的是 Python 中如何使用正则的,就是 re 模块中都有哪些方法。
接下来我们就学习几个常间的方法,更多请移步正则扩展知识完整版

1 常用方法

match() 就看开头有没有

只在整个字符串的起始位置进行匹配

示例字符串

s = "isinstance yangge enumerate www.qfedu.com 1997"

示例演示:

import re
In [4]: r = re.match("is\w+", s)

In [8]: r.group()  # 获取匹配成功的结果
Out[8]: 'isinstance'

search() 只查到第一个匹配的

从整个字符串的开头找到最后,当第一个匹配成功后,就不再继续匹配。

In [9]: r = re.search("a\w+", s)

In [10]: r.group()
Out[10]: 'ance'    

findall() 查到所有

搜索整个字符串,找到所有匹配成功的字符串,比把这些字符串放在一个列表中返回。

In [16]: r = re.findall("a\w+", s)

In [17]: r
Out[17]: ['ance', 'angge', 'ate']

sub() 替换

把匹配成功的字符串,进行替换。

# 语法:
"""
("a\w+",    "100",        s,     2)
匹配规则,替换成的新内容,  被搜索的对象, 有相同的话替换的次数

"""
In [24]: r = re.sub("a\w+", "100", s, 2)
  
In [25]: r
Out[25]: 'isinst100 y100 enumerate www.qfedu.com 1997'

# 模式不匹配时,返回原来的值

split() 分割

awk -F '[d]' 一样效果,以匹配到的字符进行分割,返回分割后的列表

In [26]: s
Out[26]: 'isinstance yangge enumerate www.qfedu.com  1997'

In [27]: r = re.split("a", s, 1)

使用多个界定符分割字符串

>>> line = 'asdf fjdk; afed, fjek,asdf,  foo'
>>> import re
>>> re.split('[;,\s]\s*', line)
['asdf', 'fjdk', 'afed', 'fjek', 'asdf', 'foo']
2. 正则分组

就是从已经成功匹配的内容中,再去把想要的取出来

grep -E xx 匹配
grep -o 匹配值按列显示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值