Python3的正则表达式详解

目录
  • 1.简介
  • 2.切分字符串
  • 3.分组
  • 4.贪婪匹配
  • 5.编译
  • 总结
  • 1.简介
  • 2.切分字符串
  • 3.分组
  • 4.贪婪匹配
  • 5.编译
  • 总结

1.简介

# 正则表达式:用来匹配字符串的武器;
# 设计思想:用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,认为匹配,否则,该字符串是不合法的;
# 实例:判断一个字符串是否是合法的Email方法:
# 1.创建一个匹配Email的正则表达式;
# 2.用该正则表达式去匹配用户的输入来判断是否合法;
# 如:\d可以匹配一个数字,\w可以匹配一个字母或数字;
# a. "00\d"可以匹配"008",但无法匹配"00A";
# b. "\d\d\d"可以匹配"009";
# c. "\w\w\d"可以匹配"py3";
# 如: .匹配任意字符
# a. "py."可以匹配"pyc"、"pyt"等;
# 匹配变长的字符:
# a.用*表示任意个字符(包括0个);
# b.用+表示至少一个字符;
# c.用?表示0个或1个字符;
# d.用{n}表示n个字符;
# e.用{n,m}表示n-m个字符;
# 实例:\d{2}\s+\d{3,6}
# a.\d{2}表示匹配2个数字,如:"52";
# b.\s可以匹配一个空格,\s+表示至少有一个空格,如:匹配" "等;
# c.\d{3,6}表示3-6个数字,如:"584520";
# 精准匹配,用[]表示范围
# a.[0-9a-zA-Z\_]表示可以匹配一个数字、字母、下划线;
# b.[0-9a-zA-Z\_]+表示可以匹配至少由一个数字、字母或下划线组成的字符串,如:"Py20";
# c.[a-zA-Z\_][0-9a-zA-Z\_]*表示匹配由字母或下划线开头,后接任意个由一个数字、字母或下划线组成的字符串;
# d.[a-zA-Z\_][0-9a-zA-Z\_]{0,19}限制变量长度为1-20个字符;
# e.A|B表示匹配A或B,如:(W|w)illard匹配"Willard"或"willard";
# f.^表示行的开头,^\d表示必须以数字开头;
# g.$表示行的结束,\d$表示必须以数字结束;
# re模块:
import re
print("匹配成功,返回一个Match对象:")
print(re.match(r"^\d{3}\-\d{3,8}$", "020-6722053"))
print("----------------------------------------------------")
print("匹配失败,返回一个None:")
print(re.match(r"^\d{3}\-\d{3,8}$", "020 6722053"))
print("----------------------------------------------------")
user_input = input("请输入测试字符串:")
if re.match(r"^W|w{1-10}", user_input):
    print("It's OK.")
else:
    print("Failed.")

# 结果输出:
匹配成功,返回一个Match对象:
<re.Match object; span=(0, 11), match='020-6722053'>
----------------------------------------------------
匹配失败,返回一个None:
None
----------------------------------------------------
请输入测试字符串:Willard584520
It's OK.

2.切分字符串

import re
str_input = input("Please input test string:")
# 通过空格切分字符串
print(re.split(r"\s+", str_input))
# 结果输出:
# Please input test string:Hello Python.
# ['Hello', 'Python.']
import re
str_input = input("Please input test string:")
print(re.split(r"[\s\,]+", str_input))
# 结果输出:
# Please input test string:Hello Willard,welcome to FUXI Technology.
# ['Hello', 'Willard', 'welcome', 'to', 'FUXI', 'Technology.']
import re
str_input = input("Please input test string:")
print(re.split(r"[\s\,\.\;]+", str_input))
# 结果输出:
# Please input test string:Hello;I am Willard.Welcome to FUXI Technology.
# ['Hello', 'I', 'am', 'Willard', 'Welcome', 'to', 'FUXI', 'Technology', '']

3.分组

# ()表示要提取的分组(Group)
# ^(\d{3})-(\d{3,8})$分别定义了两个组
import re
match_test = re.match(r"^(\d{3})-(\d{3,8})$","020-6722053")
print("match_test:", match_test)
print("match_group(0):", match_test.group(0))
print("match_group(1):", match_test.group(1))
print("match_group(2):", match_test.group(2))
print("---------------------------------------------------------")
website_match_test = re.match(r"(\w{3}).(\w{5}).(\w{3})", "www.baidu.com")
print("website_match_test:", website_match_test)
print("website_match_test_group(0):", website_match_test.group(0))
print("website_match_test_group(1):", website_match_test.group(1))
print("website_match_test_group(2):", website_match_test.group(2))
print("website_match_test_group(3):", website_match_test.group(3))

# 结果输出:
match_test: <re.Match object; span=(0, 11), match='020-6722053'>
match_group(0): 020-6722053
match_group(1): 020
match_group(2): 6722053
---------------------------------------------------------
website_match_test: <re.Match object; span=(0, 13), match='www.baidu.com'>
website_match_test_group(0): www.baidu.com
website_match_test_group(1): www
website_match_test_group(2): baidu
website_match_test_group(3): com

4.贪婪匹配

# 贪婪匹配:匹配尽可能多的字符;
import re
string_input =  input("Please input string:")
print("采用贪婪匹配:")
print(re.match(r"^(\d+)(0*)$", string_input).groups())
print("---------------------")
print("采用非贪婪匹配:")
print(re.match(r"^(\d+?)(0*)$", string_input).groups())
Please input string:1008600
采用贪婪匹配:
('1008600', '')
---------------------
采用非贪婪匹配:
('10086', '00')

5.编译

# 使用正则表达式,re模块内部:
# a.编译正则表达式,如果正则表达式的字符串本身不合法,抛出错误;
# b.用编译后的正则表达式去匹配字符串;
# c.如果一个正则表达式要重复使用几千次,考虑效率,
# 可以预编译正则表达式,重复使用时,不需要编译这个步骤,直接匹配;
import re
# 编译
re_telephone = re.compile(r"^(\d{3})-(\d{3,8})$")
# 使用
telephone_input1 = input("Willard,please input your telphone number:")
telephone_input2 = input("Chen,Please input your telphone number:")
print("match:020-6722053,", re_telephone.match(telephone_input1).groups())
print("match:020-6722066,", re_telephone.match(telephone_input2).groups())

# 结果输出:
Willard,please input your telphone number:020-6722053
Chen,Please input your telphone number:020-6722066
match:020-6722053, ('020', '6722053')
match:020-6722066, ('020', '6722066')

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

1.简介

# 正则表达式:用来匹配字符串的武器;
# 设计思想:用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,认为匹配,否则,该字符串是不合法的;
# 实例:判断一个字符串是否是合法的Email方法:
# 1.创建一个匹配Email的正则表达式;
# 2.用该正则表达式去匹配用户的输入来判断是否合法;
# 如:\d可以匹配一个数字,\w可以匹配一个字母或数字;
# a. "00\d"可以匹配"008",但无法匹配"00A";
# b. "\d\d\d"可以匹配"009";
# c. "\w\w\d"可以匹配"py3";
# 如: .匹配任意字符
# a. "py."可以匹配"pyc"、"pyt"等;
# 匹配变长的字符:
# a.用*表示任意个字符(包括0个);
# b.用+表示至少一个字符;
# c.用?表示0个或1个字符;
# d.用{n}表示n个字符;
# e.用{n,m}表示n-m个字符;
# 实例:\d{2}\s+\d{3,6}
# a.\d{2}表示匹配2个数字,如:"52";
# b.\s可以匹配一个空格,\s+表示至少有一个空格,如:匹配" "等;
# c.\d{3,6}表示3-6个数字,如:"584520";
# 精准匹配,用[]表示范围
# a.[0-9a-zA-Z\_]表示可以匹配一个数字、字母、下划线;
# b.[0-9a-zA-Z\_]+表示可以匹配至少由一个数字、字母或下划线组成的字符串,如:"Py20";
# c.[a-zA-Z\_][0-9a-zA-Z\_]*表示匹配由字母或下划线开头,后接任意个由一个数字、字母或下划线组成的字符串;
# d.[a-zA-Z\_][0-9a-zA-Z\_]{0,19}限制变量长度为1-20个字符;
# e.A|B表示匹配A或B,如:(W|w)illard匹配"Willard"或"willard";
# f.^表示行的开头,^\d表示必须以数字开头;
# g.$表示行的结束,\d$表示必须以数字结束;
# re模块:
import re
print("匹配成功,返回一个Match对象:")
print(re.match(r"^\d{3}\-\d{3,8}$", "020-6722053"))
print("----------------------------------------------------")
print("匹配失败,返回一个None:")
print(re.match(r"^\d{3}\-\d{3,8}$", "020 6722053"))
print("----------------------------------------------------")
user_input = input("请输入测试字符串:")
if re.match(r"^W|w{1-10}", user_input):
    print("It's OK.")
else:
    print("Failed.")

# 结果输出:
匹配成功,返回一个Match对象:
<re.Match object; span=(0, 11), match='020-6722053'>
----------------------------------------------------
匹配失败,返回一个None:
None
----------------------------------------------------
请输入测试字符串:Willard584520
It's OK.

2.切分字符串

import re
str_input = input("Please input test string:")
# 通过空格切分字符串
print(re.split(r"\s+", str_input))
# 结果输出:
# Please input test string:Hello Python.
# ['Hello', 'Python.']
import re
str_input = input("Please input test string:")
print(re.split(r"[\s\,]+", str_input))
# 结果输出:
# Please input test string:Hello Willard,welcome to FUXI Technology.
# ['Hello', 'Willard', 'welcome', 'to', 'FUXI', 'Technology.']
import re
str_input = input("Please input test string:")
print(re.split(r"[\s\,\.\;]+", str_input))
# 结果输出:
# Please input test string:Hello;I am Willard.Welcome to FUXI Technology.
# ['Hello', 'I', 'am', 'Willard', 'Welcome', 'to', 'FUXI', 'Technology', '']

3.分组

# ()表示要提取的分组(Group)
# ^(\d{3})-(\d{3,8})$分别定义了两个组
import re
match_test = re.match(r"^(\d{3})-(\d{3,8})$","020-6722053")
print("match_test:", match_test)
print("match_group(0):", match_test.group(0))
print("match_group(1):", match_test.group(1))
print("match_group(2):", match_test.group(2))
print("---------------------------------------------------------")
website_match_test = re.match(r"(\w{3}).(\w{5}).(\w{3})", "www.baidu.com")
print("website_match_test:", website_match_test)
print("website_match_test_group(0):", website_match_test.group(0))
print("website_match_test_group(1):", website_match_test.group(1))
print("website_match_test_group(2):", website_match_test.group(2))
print("website_match_test_group(3):", website_match_test.group(3))

# 结果输出:
match_test: <re.Match object; span=(0, 11), match='020-6722053'>
match_group(0): 020-6722053
match_group(1): 020
match_group(2): 6722053
---------------------------------------------------------
website_match_test: <re.Match object; span=(0, 13), match='www.baidu.com'>
website_match_test_group(0): www.baidu.com
website_match_test_group(1): www
website_match_test_group(2): baidu
website_match_test_group(3): com

4.贪婪匹配

# 贪婪匹配:匹配尽可能多的字符;
import re
string_input =  input("Please input string:")
print("采用贪婪匹配:")
print(re.match(r"^(\d+)(0*)$", string_input).groups())
print("---------------------")
print("采用非贪婪匹配:")
print(re.match(r"^(\d+?)(0*)$", string_input).groups())
Please input string:1008600
采用贪婪匹配:
('1008600', '')
---------------------
采用非贪婪匹配:
('10086', '00')

5.编译

# 使用正则表达式,re模块内部:
# a.编译正则表达式,如果正则表达式的字符串本身不合法,抛出错误;
# b.用编译后的正则表达式去匹配字符串;
# c.如果一个正则表达式要重复使用几千次,考虑效率,
# 可以预编译正则表达式,重复使用时,不需要编译这个步骤,直接匹配;
import re
# 编译
re_telephone = re.compile(r"^(\d{3})-(\d{3,8})$")
# 使用
telephone_input1 = input("Willard,please input your telphone number:")
telephone_input2 = input("Chen,Please input your telphone number:")
print("match:020-6722053,", re_telephone.match(telephone_input1).groups())
print("match:020-6722066,", re_telephone.match(telephone_input2).groups())

# 结果输出:
Willard,please input your telphone number:020-6722053
Chen,Please input your telphone number:020-6722066
match:020-6722053, ('020', '6722053')
match:020-6722066, ('020', '6722066')

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • python的正则表达式和re模块详解,一起来看看

    目录 一.正则表达式基础 二.pythonre模块 三.进阶 总结 一.正则表达式基础 二.python re模块 注意:正则表达式 != re eg: 注意:如果返回的是对象,则需要使用group分组. 三.进阶 1.分组,使用()即可 028-888888 tel_num = "028-888888" pattern_obj = re.compile("(\d{3})-(\d{6})") res = re.match(pattern=pattern_obj, s

  • python正则表达式(re模块)的使用详解

    目录 前言 re.match函数 匹配单个字符 匹配多个字符 匹配开头结尾 匹配分组 re.compile函数 re.search函数 re.findall函数 re.finditer函数 re.sub函数 re.subn函数 re.split函数 python贪婪和⾮贪婪 r的作⽤ 总结 前言 在Python中需要通过正则表达式对字符串进⾏匹配的时候,可以使⽤⼀个python自带的模块,名字为re. 正则表达式的大致匹配过程是: 1.依次拿出表达式和文本中的字符比较, 2.如果每一个字符都能匹

  • Python正则表达式的另类解答

    目录 一.正则表达式的作用 二.正则表达式基本符号 三.Python自带正则表达式模块 总结 一.正则表达式的作用 提示:正则表达式是一段特殊的字符串,它表示的是一段有规律的信息.如果我们想从一段文字中提取想要的内容,就可以通过正则表达式来方便的帮助我们提取. 提示:以下是本篇文章正文内容,下面案例可供参考 二.正则表达式基本符号 1.点号“.” “.”表示的是匹配除了换行符以外的任何一个字符,包括但不限于英文字母.数字.汉字.英文标点符号和中文标点符号. 2.星号“” “”表示匹配它前面的一个

  • python正则表达式最详解

    目录 一.正则表达式–元字符 1. 数量词 2. 字符匹配 3. 边界匹配 4. 组 5. 匹配模式参数 二.方法 re.findall re.match group匹配对象 re.search re.compile 三.检索和替换 re.sub 替换字符串 总结 一.正则表达式–元字符 re 模块使 Python 语言拥有全部的正则表达式功能 1. 数量词 # 提取大小写字母混合的单词 import re a = 'Excel 12345Word23456PPT12Lr' r = re.fin

  • Python 正则表达式详解

    目录 1.正则表达式是什么 2.1用正则表达式 2.2匹配原理 2.3常用函数 总结 1.正则表达式是什么 很简单就是一种字符串匹配,eg: 比如你在注册账户时我们需要对用户的用户名判断是否合法,这时候就需要对用户输入的检索,或者给你5-11位的数字你确定他是否为qq号. 2.1用正则表达式 import re 2.2匹配原理 import re msg = '董小姐桥边姑娘南方小姐' pattern = re.compile('董小姐') result = pattern.match(msg)

  • python常用的正则表达式大全

    1.正则表达式 正则表达式是用来匹配与查找字符串的,从网上爬取数据自然或多或少会用到正则表达式,python的正则表达式要先引入re模块,正则表达式以r引导,例如: 其中**r“\d+”**正则表达式表示匹配连续的多个数值,search是re中的函数,从"abc123cd"字符串中搜索连续的数值,得到"123",返回一个匹配对象,结果如上. 2.字符串"\d"匹配0~9之间的一个数值 3.字符"+"重复前面一个匹配字符一次或者

  • Python3的正则表达式详解

    目录 1.简介 2.切分字符串 3.分组 4.贪婪匹配 5.编译 总结 1.简介 2.切分字符串 3.分组 4.贪婪匹配 5.编译 总结 1.简介 # 正则表达式:用来匹配字符串的武器: # 设计思想:用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,认为匹配,否则,该字符串是不合法的: # 实例:判断一个字符串是否是合法的Email方法: # 1.创建一个匹配Email的正则表达式: # 2.用该正则表达式去匹配用户的输入来判断是否合法: # 如:\d可以匹配一个数字,\w可以匹

  • Python面向对象总结及类与正则表达式详解

    Python3 面向对象 -------------------------------------------------------------------------------- 一丶面向对象技术简介 •类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. •方法:类中定义的函数. •类变量:类变量在整个实例化的对象中是公用的.类变量定义在类中且在函数体之外.类变量通常不作为实例变量使用. •数据成员:类变量或者实例变

  • python模块之re正则表达式详解

    一.简单介绍 正则表达式是一种小型的.高度专业化的编程语言,并不是python中特有的,是许多编程语言中基础而又重要的一部分.在python中,主要通过re模块来实现. 正则表达式模式被编译成一系列的字节码,然后由用c编写的匹配引擎执行.那么正则表达式通常有哪些使用场景呢? 比如为想要匹配的相应字符串集指定规则: 该字符串集可以是包含e-mail地址.Internet地址.电话号码,或是根据需求自定义的一些字符串集: 当然也可以去判断一个字符串集是否符合我们定义的匹配规则: 找到字符串中匹配该规

  • 判断颜色是否合法的正则表达式(详解)

    "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$"; 意思是:以#开头,后面是数字和a-f的字符(大写或小写),这个值是6位或3位.要匹配一个3为是为了符合css颜色的简写规则: "#abc"=="#aabbcc" 注意:如果需要进行16位和10位的转换,比如将颜色值转成int存在数据库,如果是6位的颜色没问题,如果是3位的颜色就有问题了,因为当你取回来从10进制转为 16进制的时候,你不知道他应该是3位还是6位. 比如:#

  • CentOS7安装Python3的教程详解

    打算学习linux和考一下认证. 学习HCIA-AI实验手册发现的小问题和记录贴,防止自己忘.我不知道这个手册是不是公开的,你们自己去华为下载吧 首先执行 yum -y groupinstall 'Development tools' yum -y install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel //Python3.7以上需要装libfii-devel //yum insta

  • 对Python3 * 和 ** 运算符详解

    在 Python 中,* 和 ** 具有语法多义性,具体来说是有四类用法. 1. 算数运算 * 代表乘法 ** 代表乘方 >>> 2 * 5 10 >>> 2 ** 5 32 2. 函数形参 *args 和 **kwargs 主要用于函数定义. 你可以将不定数量的参数传递给一个函数.不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字.其实并不是必须写成 *args 和 **kwargs. *(星号) 才是必须的. 你也可以写

  • python3 lambda表达式详解

    技术背景 lambda表达式本身是一个非常基础的python函数语法,其基本功能跟使用def所定义的python函数是一样的,只是lambda表达式基本在一行以内就完整的表达了整个函数的运算逻辑.这里我们简单展示一些lambda表达式的使用示例,以供参考. 二元求和 首先我们尝试一个最简单的二元求和的ipython案例,输入两个参数x和y,返回这两个元素的和: [dechin@dechin-manjaro 2021-python]$ ipython Python 3.8.5 (default,

  • Linux行处理工具之grep 正则表达式详解

    目录 正则表达式在grep应用以及差别 匹配案例 fgrep 总结 之前我们学习了linux grep的基本操作,以及提及了linux grep的孪生兄弟egrep 和 fgrep,这次我们来看下. 在介绍正则表达式之前,我们先来尝试一下,假如有如下文本. 我们想获取空行,应该如何来写呢? 命令: grep ^$ test1 -n 通过上述例子,我们使用正则表达式^$已经成功拿到了第四行数据,那么,这究竟如何解呢,我们细看博文. 正则表达式在grep应用以及差别 grep表达式有三种不同的版本,

  • JS正则表达式详解[收藏]

    JS的正则表达式 //校验是否全由数字组成 function isDigit(s) { var patrn=/^[0-9]{1,20}$/; if (!patrn.exec(s)) return false return true } //校验登录名:只能输入5-20个以字母开头.可带数字."_"."."的字串 function isRegisterUserName(s) { var patrn=/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,1

  • 正则表达式详解

    正则表达式,又称正规表示法.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本. 正则表达式可以干嘛? 1.数据有效性验证,可以对一个字符串进行测试,看该字符串是否符合某种规定. 2.替换文本,可以在文档中将指定的文字删除,或替换为其他文字. 3.根据字符串提取一个子字符串,用来在

随机推荐