python 中正则表达式

正则表达式

正则表达式是什么? 我认为正则表达式是一种根据特定语法构造的文字匹配表达式

正则表达式语法

正则表达式的发明是为了匹配 文字, 当然 文字 是一个很抽象的概念. 下面我们来 具象它.
现在我们对计算机中所有的文字进行分类:

  1. 英文字母 (a…z, A…Z)
  2. 数字 (0…9)
  3. 空格和Tab键 (SpaceTab)
  4. 其他字符 (汉字, 法语字母, 日语字母…)
    例如:
0
左边是正则表达式,
右边是匹配的结果
'a'
a
'0'
'.'

上面是使用正则表达式匹配单个文字的例子, 为了一次性匹配多个文字, 正则表达式
规定了一些其他的语法, 这些语法需要勤加练习才能掌握, 这里就不再赘述了.
具体语法我写在下面了

\w: 英文(26), 数字, 中文...
\W: 非英文, 数字, 中文...
[]: 匹配  "中括号"  中表达式的其中一种情况
\s: 匹配空格和tab键
\t: 匹配空格和tab键
\d: 只匹配一个数字
. :  任意字符, 但是\n匹配不了1

^: 从开头匹配, 不会因为中间符合条件就成功
$: 一直匹配到结尾



* :  匹配0次或者无限次, 接在匹配一个的后面
{n, m} :  匹配n-m个, 接在匹配一个的后面
? :  匹配0个或者一个, 接在匹配一个的后面
re.match(re, striing, re.S).group()
	能够匹配到\n,
+ :  只能匹配1个或无限个, 和*号区别
\ :  转义, 在. 或者 ? 前添加
| :  python中匹配前面一段或者后面一段东西,
	一般需要借助括号来限定其作用域

学习正则表达式, 推荐上正则表达式在线练习网站

python 中的正则表达式

re 菜鸟教程
在编写 python 代码来使用正则表达式匹配文字时, 我们需要借助re库. 下面通过一些例子来介绍它的使用.

  1. 使用正则表达式匹配并提取字符串中的 ip 地址
import re

template_str = ';lajfa;fj;ajfljd127.0.0.1aljf;lajflkjafkldjalkfjd192.169.3.3'
re_str = r'\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}'  # 定义正则表达式
ip_pattern = re.compile(re_str)  # 编译正则表达式, 套路
ips = re.findall(ip_pattern, template_str)  # 找出所有的符合正则表达式的 文字
print('ips: ', ips)  # 返回一个结果 list
"""ips: , ['127.0.0.1', '192.169.3.3']"""

  1. 使用正则表达式匹配并提取字符串中的电话号码
import re

template_str = '13600000000博主真帅809890889089'
re_str = r'[1]([3-9])[0-9]{9}'  # 定义正则表达式
iphone_pattern = re.compile(re_str)  # 编译正则表达式, 套路
iphones = re.match(iphone_pattern , template_str).group(0)
# 找出 1 个 匹配正则表达式的字符串
print('iphons: ', iphones )  # 返回一个结果 list
"""iphons:  13600000000"""
  1. 使用正则表达式匹配并提取"博主"及其后面两个字符
import re

template_str = '13600000000博主真帅809890889089博主厉害'
re_str = r'博主.{2}'  # 定义正则表达式
pattern = re.compile(re_str)  # 编译正则表达式, 套路
result = re.search(pattern , template_str).group()
# 找出 1 个 匹配正则表达式的字符串
print('result: ', result )  # 返回一个结果 list
"""result:  博主真帅"""

总结 re 使用套路

套路1:

  1. 编写正则表达式 r'[1]([3-9])[0-9]{9}'
  2. 编译 re.compile(r'[1]([3-9])[0-9]{9}')
  3. 使用 match / search 匹配待提取字符串 re.match(paaatern, template_str, re.I)
  4. 使用group / groups 提取出匹配得到的字符串group(0) / groups()

套路2:
6. 编写正则表达式
7. 编译
8. 使用 findall 匹配待提取字符串, 得到匹配结果 list

附录:

re的常用方法

1.re.match(pattern, str, flags=0)

从第一个字符开始匹配, 其中 pattern 对应前文的 pattern, str表示待匹配字符串, flags代表匹配模式

  1. re.search() # 同上
  2. re.findall() # 同上
  3. re.compile() # 编译
  4. re.sub(pattern, replace_str, str, count, flag ) # 字符串替换
  5. re.split(pattern, str, maxsplit, flags) # 字符串分割

re匹配模式

  1. re.I 忽略大小写
    re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
    re.M 多行模式
    re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
    re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
    re.X 为了增加可读性,忽略空格和 # 后面的注释
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值