原创|两天搞定正则表达式

简介: 原创|两天搞定正则表达式

简说Python,号主老表,Python终身学习者,数据分析爱好者,从18年开始分享Python知识,原创文章227篇,写过Python、SQL、Excel入门文章,也写过Web开发、数据分析文章,老表还总结整理了一份2022Python学习资料和电子书资源,关注后私信回复:2022 即可领取。

一、前言

大家好,我是老表,今天这篇文章是两年半前写的,最近写代码有用到正则,感觉写的真的蛮有用的,所以翻出来分享给大家,毕竟两年半前只有不到1000读者,现在有4.5w+,应该还是有蛮多读者没有看过。

在公众号后台回复:文章,可以查看本公众号2020前的原创文章,之前是初学者,所以很多教程都写的蛮详细,易理解,易操作,欢迎点赞。

接下来给大家分享的是前几年写的正则表达式的学习笔记。

二、正则表达式介绍

1.正则表达式官方简介?

   正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

三、看代码,边学边敲边记正则表达式

day01:

1'''
 2author : 极简XksA
 3date : 2018.7.27
 4goal : 正则表达式
 5'''
 6
 7import re
 8
 9line = 'jijianXksA123'
10
11# ^a 表示匹配以a开头的字符串(只匹配一次)
12# . 表示该字符可为任意字符(只匹配一次)
13# * 表示前面的字符可以出现任意次(0次或多次)(多次匹配)
14reg_str01 = '^j.*'    # 表示以j开头的字符串
15# re.match 函数
16# 第一个参数是匹配的格式
17# 第二参数是要匹配的字符串
18# 返回值为:匹配成功,返回match对象,否则返回:None
19
20if re.match(reg_str01,line) :
21    print("匹配成功!")  # reg_str = '^j.*'     匹配成功
22else:
23    print("匹配失败!")  # reg_str = '^i.*'     匹配失败
24
25
26# 23$ 表示匹配以23结尾的字符串(只匹配一次)
27reg_str02 = '^j.*23$'
28if re.match(reg_str02,line) :
29    print("匹配成功!")  # reg_str = '^j.*23$'     匹配成功
30else:
31    print("匹配失败!")  # reg_str = '^j.*13$'     匹配失败
32
33
34line01 = 'boooboaobxby'
35# () 内的为 匹配模式,通过 group函数 可以取出匹配结果
36# 正则表达式贪婪匹配模式:从后面(右边)开始匹配
37reg_str03 = '.*(b.*b).*'
38test01 = re.match(reg_str03,line01)
39if  test01:
40    print(test01.group(1))      # result : bxb
41else:
42    print("匹配失败!")
43
44# 正则表达式非贪婪匹配模式:从前面(左边)开始匹配
45# ? : 表示从左边开始匹配,匹配到第一个符合模式的内容,即进入模式
46#
47reg_str03 = '.*?(b.*b).*'   # 半贪婪匹配
48reg_str04 = '.*?(b.*?b).*'  # 非贪婪匹配
49test01 = re.match(reg_str03,line01)
50test02 = re.match(reg_str04,line01)
51if  test01 and test02:
52    print(test01.group(1))      # result : boooboaobxb
53    print(test02.group(1))  # result : booob
54else:
55    print("匹配失败!")

day02:

1'''
 2author : 极简XksA
 3date : 2018.7.28
 4goal : 正则表达式
 5'''
 6import re
 7line01 = 'boooboaobcxby'
 8
 9def regtest(reg_str,line = line01):
10    test = re.match(reg_str, line)
11    if test:
12        print(test.group(1))
13    else:
14        print("匹配失败!")
15
16# + :表示前面的字符,至少出现一次
17reg_str04 = '.*(b.+b).*'  # (b.+b)表示b与b之间至少有一个字符
18regtest(reg_str04)      # result : bcxb
19
20# {n} : 控制前面字符出现次数
21# a{2} : 表示a出现两次
22# b{3,4} : 表示b至少出现3次,最多出4次
23# c{4,} : 表示c至少出现4次
24reg_str05 = '.*(b.{2}b).*'  # (b.{2}b)表示匹配到的b与b之间,只有两字符
25reg_str06 = '.*(b.{3,4}b).*'  # (b.{3,6}b)表示匹配到的b与b之间,至少有3个字符,至多有4个字符
26reg_str07 = '.*(b.{4,}b).*'  # (b.{8,}b)表示匹配到的b与b之间,至少有4个字符
27regtest(reg_str05)   # result : bcxb
28regtest(reg_str06)   # result : boaob
29regtest(reg_str07)   # result : boaobcxb
30
31# | :表示 或
32# (abc|123) : 表示匹配到 abc 或者 123,都算匹配成功
33reg_str08 = '.*(boo|abc)'
34reg_str09 = '.*(abc|boo)'
35regtest(reg_str08)   # result : boo
36regtest(reg_str09)   # result : boo
37
38# [] : 表示 里面包含的内容都可以进行匹配,包含内容只有表面字符含义
39# [abcd] : 表示 只要这个字符为 a/b/c/d中的一个都可以匹配成功
40# [0-9] : 表示 只要这个字符在 0-9 这个区间内,都可以匹配成功
41# [^x] : 表示匹配 字符不为 x
42line02 = '电话号:15573563467'
43reg_str10 = '.*(1[3458][0-9]{9}).*'
44reg_str11 = '.*(1[3458][^1]{9}).*'
45regtest(reg_str10,line02)   # result : 15573563467
46regtest(reg_str11,line02)   # result : 15573563467
47
48# \s 表示匹配空格,匹配一次
49# \S 表示匹配不是空格的字符,匹配一次
50# \w 表示匹配 A-Z、0-9、_ 中的容易字符,匹配一次
51# \W 与 \w 相反
52# \d 表示数字
53# [\u4E00-\u9FA5] : 表示所有汉字,unicode 编码
54
55def regtest_test(reg_str,line = line01):
56    test = re.match(reg_str, line)
57    if test:
58        print(test.group(1)+':'+test.group(2)+'-'+test.group(3)+'-'+test.group(4))
59    else:
60        print("匹配失败!")
61
62# 简单实例
63str01 = '张三出生于1997年12月20日'
64str02 = '李四出生于1989-01-20'
65str03 = '王五出生于1997/2/5'
66str04 = '赵六出生于1997.12.20'
67str = [str01,str02,str03,str04]
68# 提取出姓名+出生日期
69# 匹配模式
70reg_str12 = '(.*)出生于(\d{4})[.年/-](\d{1,2})[.月/-](\d{1,2}).*?'
71for i in range(4):
72    regtest_test(reg_str12,str[i])
73# result :
74#       张三:1997-12-20
75#       李四:1989-01-20
76#       王五:1997-2-5
77#       赵六:1997-12-20

四、后言

边敲边学边做,坚持学习分享。



相关文章
|
2月前
|
机器学习/深度学习 Unix Java
程序技术好文:正则表达式详解
程序技术好文:正则表达式详解
62 0
全网最易懂的正则表达式教程(3)- 量词
全网最易懂的正则表达式教程(3)- 量词
109 0
|
文字识别 搜索推荐 机器人
搜索引擎原创内容写作建议
搜索引擎的逻辑使用了很多不同的元素,所以简单地在标题和描述中放很多词并不能保证搜索结果的顶部。如果您在网站的标题或描述中包含与您的品牌或热门话题无关的关键字,由于与网站的品牌没有关系,用户的满意度会降低,因此您可能会在质量评估中处于不利地位网站。
138 0
|
机器学习/深度学习 移动开发 JavaScript
正则表达式学习记录
正则表达式学习记录
198 0
|
Python Go Windows
【原创】5分钟玩转Markdown
希望简书支持的Markdown功能 [TOC]生成目录 PC端预览时,原文与预览同步滚动 支持公式 $$ x{yz}=(1+{\rm e}x){-2xy^w} $$ MacOS 与 Windows通吃的Markdown编辑器 typora,很好用。
基本正则笔记
1.   ^   字符串的开始; $ 字符串的结束  example: "^abc" 以abc 开头   "def$"  以def结尾 2.  *   没有或者更多; + 一次或者更多  ; ? 没有或者一个  example:  "ab*" a 后面跟着零个或者若干个b;       "ab+" ...
1062 0