python 简单正则表达式使用

一、re库导入

python的正则表达式使用需用到re库。若尚未安装re库,可在终端(命令行)中输入pip3 install re进行安装。若已安装,则可直接输入下面代码进行导入。

import re

二、常用函数

由于只是简单介绍,本文只讨论re库中的两个最常用函数:re.compile()re.findall()。通过这两个函数,基本可以实现对于字符串中各种类型的字符的检索和提取。

1. re.compile()

re.compile()主要用于设定要找什么类型或者什么样的字符。将要找的类型以字符串形式放在括号内即可。

例如,现有一个字符串s,内容如下:

import re
s = "why when how where what"

p = re.compile('[wh]')

re.compile('[wh]')即表示要找所有的’w’或’h’字符。

2. re.findall()

re.findall()用于返回找到的字符组成的列表。书接上文,还是上面的例子:

import re
s = "why when how where what"

p = re.compile('[wh]')
p.findall(s)

最后一行的p.findall(s)即表示根据p的规则寻找字符串s中符合规则的字符。输出结果如下:

['w', 'h', 'w', 'h', 'h', 'w', 'w', 'h', 'w', 'h']

可见,按照字符串中字符的顺序,所有符合要求的字符都被放入了列表中并输出。

三、具体实例

为避免干讲效率太低,下面直接结合实例来看。

1. 找字母

小写字母表示方法:[a-z]
大写字母表示方法:[A-Z]
大小写都要:[a-zA-Z]
用个新例子:

test_str = "FGH12342g13hjkk0"

p = re.compile('[a-z]')
p.findall(test_str)

结果如下:

['g', 'h', 'j', 'k', 'k']

只输出了小写字母。

若换为大写:

test_str = "FGH12342g13hjkk0"

p = re.compile('[A-Z]')
p.findall(test_str)

结果如下:

['F', 'G', 'H']

若大小写都要:

test_str = "FGH12342g13hjkk0"

p = re.compile('[A-Za-z]')
p.findall(test_str)

结果如下:

['F', 'G', 'H', 'g', 'h', 'j', 'k', 'k']

大小写全输出。

2. 找数字

数字表示方法:[0-9]

test_str = "FGH12342g13hjkk0"

p = re.compile('[0-9]')
p.findall(test_str)

结果如下:

['1', '2', '3', '4', '2', '1', '3', '0']

注:数字也是以字符串形式输出,而非数值。

3. ^用法

^表示not,即取反。
例:仍是上面例子中的字符串,若想要数值之外的字符串内容,可以如下表示:

test_str = "FGH12342g13hjkk0"

p = re.compile('[^0-9]')
p.findall(test_str)

结果如下:

['F', 'G', 'H', 'g', 'h', 'j', 'k', 'k']

即得到所有非数值的字符。

4. 快捷表示

对于常用的字符类型选择,re有对应的快捷表示方法。具体如下:

表示含义
\d数值,即等同于[0-9]
\D非数值,即等同于[^0-9]
\s空白字符,空格、回车、tab键等
\S非空白字符
\w字母数字字符(包括下划线),等同于[a-zA-Z0-9_]
\W非字母数字字符,等同于[^a-zA-Z0-9_]

所有的大写格式都相当于小写格式取反。
例:

test_str = '123x497a123xb401d7R43'

p = re.compile('\d')
p.findall(test_str)

结果如下:

['1', '2', '3', '4', '9', '7', '1', '2', '3', '4', '0', '1', '7', '4', '3']

5. *用法

*用于表示其前面的筛选规则重复0或多次。这样讲比较抽象,还是看例子:

test_str = 'written watt t ttt'

p = re.compile('t*')
p.findall(test_str)

对于上述代码,返回结果如下:

['', '', '', 'tt', '', '', '', '', '', 'tt', '', 't', '', 'ttt', '']

根据结果,我们可以看到,所有出现t的地方,无论一次或多次,都会放在一个引号里作为整体输出。这个比较好理解。问题在于这些空白字符串。根据其数量和顺序我们不难看出,设置t*作为寻找的字符的格式后,算法会对test_str字符串中的每一个字符进行遍历,如果不符合t,则保存空白字符在列表中,看下一个字符;如果符合是t,则看有几个连续的t,将其放在一个字符串中放入列表,然后接着往后遍历。遍历完整个test_str后,将列表返回并输出。

6. +用法

理解了*的用法,+就简单了很多。
+用于表示其前面的筛选规则重复1或多次。
还是刚才的例子,把*换成+:

test_str = 'written watt t ttt'

p = re.compile('t+')
p.findall(test_str)

得到结果如下:

['tt', 'tt', 't', 'ttt']

可见,只是在*的基础上,把重复0次的情况,即空白字符,去掉了。

7. .用法

.用于表示占位,有几个点就占几位。
例:

test_str = 'written watt t ttt'
p = re.compile('t.t')
p.findall(test_str)

结果如下:

['t t', 'ttt']

可见,.占了一个位置,此位置可以是任何字符,最终结果将长为3且首尾均为t的所有情况输出。

结语:
上面这些表示比较基础,能适用于大多数较基本的需求,希望能为读者提供些帮助。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值