广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python正则表达式以及常用匹配实例
  • 750
分享到

Python正则表达式以及常用匹配实例

2024-04-02 19:04:59 750人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录1 正则表达式对象2 正则表达式修饰符 - 可选标志3 正则表达式字符意义re.match函数re.search方法替换re.subre.compile 函数findallre.

1 正则表达式对象

re.RegexObject

re.compile() 返回 RegexObject 对象。

re.MatchObject

group() 返回被 RE 匹配的字符串

  • start() 返回匹配开始的位置
  • end() 返回匹配结束的位置
  • span() 返回一个元组包含匹配 (开始,结束) 的位置

2 正则表达式修饰符 - 可选标志

re.I 大小写不敏感

re.L 做本地化识别(locale-aware)匹配

re.M 多行匹配,影响 ^ 和 $

re.S 使 . 匹配包括换行在内的所有字符

re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.

re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

3 正则表达式字符意义

符号含义
^以什么开头
$以什么结尾
.匹配任意字符,除了换行符
[…]用来表示一组字符,单独列出:[amk] 匹配 ‘a’,‘m’或’k’
[^…]取反
*匹配0个或多个
+匹配1个或多个
?匹配0个或1个由前面的正则表达式定义的片段
{n}{ n}
{n,}精确匹配 n+ 个
{n,m}精确匹配 n 到m个
a|ba或b
()标记 组合
\w匹配字母数字及下划线,等价于 ‘[A-Za-z0-9_]’
\W匹配非字母数字及下划线,等价于’[^A-Za-z0-9_]
\s匹配任意空白字符,等价于 [ \f\n\r\t\v]。
\S匹配任意非空字符 [^ \f\n\r\t\v]
\d匹配任意数字,等价于 [0-9].
\D匹配任意非数字,等价于 [^0-9]。
\A匹配字符串开始
\Z匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。
\z匹配字符串结束
\G匹配最后匹配完成的位置。
\b单词边界
\B非单词边界

组合使用

[ab]cde匹配 acde 或 bcde
abc[de]匹配 abcd 或 abce
[abcdef]匹配中括号内的任意一个字母
[0-9]匹配任何数字。类似于 [0123456789]
[a-z]匹配任何小写字母
[A-Z]匹配任何大写字母
[a-zA-Z0-9]匹配任何字母及数字
[^0-9]取反 匹配数字之外
.*任意一个字符 出现0次或多次 尽可能多的匹配
.*?只匹配符合条件的最少字符 尽可能少的匹配

re.match函数

re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

re.match(pattern, string, flags=0)

pattern 匹配的正则表达式 string 要匹配的字符串。 flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

import re
#在起始位置匹配  匹配 www 是不是在开头
print(re.match('www', 'www.aaa.com'))          # <re.Match object; span=(0, 3), match='www'>
print(re.match('www', 'www.aaa.com').span())   # (0, 3)
print(re.match('com', 'www.bbb.com'))          # None


line = "wo shi ni baba oo aa"
#最后的 .*就是后面所有的   re.M 多行匹配,影响 ^ 和 $     re.I 大小写不敏感
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
if matchObj:
    print("matchObj.group() : ", matchObj.group())     #返回匹配到的整个表达式的字符串
    print("matchObj.group(1) : ", matchObj.group(1))   #返回标记的1个() (.*)就是任意字符出现0个或多个 在这就是 wo
    print("matchObj.group(2) : ", matchObj.group(2))   #返回标记的2个() (.*?) 只匹配符合条件的最少字符 和.*是差不多的 就是 ni
else:
    print("No match!!")

#matchObj.group() :  wo shi ni baba oo aa
#matchObj.group(1) :  wo
#matchObj.group(2) :  ni

re.search方法

re.search 扫描整个字符串并返回第一个成功的匹配。

re.search(pattern, string, flags=0)

print(re.search('ab', 'www.abcdef.com').span())  # (4, 6)
print(re.search('cc', 'www.abcdef.ccom').span()) # (11, 13)

替换re.sub

re.sub用于替换字符串中的匹配项。

re.sub(pattern, repl, string, count=0, flags=0)

pattern : 正则中的模式字符串。rep : 替换内容,也可为一个函数。 string : 要被查找替换的原始字符串。count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

num1 = "a11a-b22b-c33c-d44d-e55e #sdsdasdas111da"
# re.sub(pattern, repl, string, count=0, flags=0)
##删除#号之后的   将#号之后的所有 替换为空
num2 = re.sub(r'#.*$', "", num1)     
print(num2)                               #a11a-b22b-c33c-d44d-e55e
#  #\D 匹配任意非数字  替换为空
num3 = re.sub(r'\D', "", num1)          
print(num3)                               #1122334455111

def test(x):
    print(x)
    y = int(x.group())
    y *= 2
    return str(y)
# 内部调用test方法时 会把 匹配到的 数据以 re.Match的格式传递
print(re.sub(r'\d+', test, p))

re.compile 函数

函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。

re.compile(pattern,[flags])

pattern : 一个字符串形式的正则表达式 flags : 可选,表示匹配模式,比如忽略大小写,多行模式等

pattern = re.compile(r'([a-z]+) ([a-z]+) (.*)', re.I)
str1 = pattern.match('Wo shi ni Ba ba')
print(str1)              #<re.Match object; span=(0, 15), match='Wo shi ni Ba ba'>
print(str1.group(0))     #Wo shi ni Ba ba
print(str1.group(1))     #Wo
print(str1.group(2))     #shi
print(str1.group(3))     #ni Ba ba
print(str1.groups())     #('Wo', 'shi', 'ni Ba ba')
print(str1.span(1))      #(0, 2)
print(str1.span(2))      #(3, 6)
print(str1.span(3))      #(7, 15)

findall

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。

findall(string, [pos], [endpos])

string : 待匹配的字符串。 pos : 可选参数,指定字符串的起始位置,默认为 0。 endpos : 可选参数,指定字符串的结束位置,默认为字符串的长度。

pattern = re.compile(r'\d+')  # 查找数字
result1 = pattern.findall('aaa 123 bbb 456 ccc 789 DDD 222')
result2 = pattern.findall('aa11bbb22cc33Dd44cc55', 0, 10)         # 0 10限制查找的下标
print(result1)        #['123', '456', '789', '222']
print(result2)        #['11', '22']

re.finditer

和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

re.finditer(pattern, string, flags=0)

pattern 匹配的正则表达式 string 要匹配的字符串。flags 标志位

it = re.finditer(r"\d+","aaa 123 bbb 456 ccc 789 ddd 222")
for match in it:
    print(match.group())
#123
#456
#789
#222

re.split

split 方法按照能够匹配的子串将字符串分割后返回列表

re.split(pattern, string, maxsplit=0, flags=0) maxsplit分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。

m = re.split('\W+', 'aaa 123 bbb 456 ccc 789 ddd 222')  #匹配非字母作为分割
print(m)   #['aaa', '123', 'bbb', '456', 'ccc', '789', 'ddd', '222']

m = re.split(' ','aaa 123 BBB 456 ccc 789 ddd 222')    #匹配非空格作为分割
print(m)   #['aaa', '123', 'BBB', '456', 'ccc', '789', 'ddd', '222']

m = re.split('[0-9]{3}','aaa 123 BBB 456 ccc 789 ddd 222')  #出现 3 个数字相连 为分割
print(m)  #['aaa ', ' BBB ', ' ccc ', ' ddd ', '']

练习:

#判断用户输入是否是数字  fullmatch 全文匹配
import  re
num = input('请输入一段数字:')
if re.fullmatch(r'\d+(\.?\d+)?',num):   #\d+ 数字匹配一个或多个 \.?转义. 出现0 或1 次  后面再是数字   再把小数点和小数点后面的 作为整体  0次或1次
    print('是个数字')
    print(num)
else:
    print('不是一个数字')

m = 'aaa_123_bbb-456-CCC_789_ddd_222'
#r^\D[a-z0-9A-Z_\-]{3,13}     #以非数字开头  数字字母下滑线组成的 长度4 到14 位的字符串
b = re.match(r'^\D[a-z0-9A-Z_\-]{3,13}', m)
print(b.group())      #aaa_123_bbb-45
print(b.span())       #(0, 14)


#匹配游戏
#r'^[0-9a-zA-Z_]{0,19}@[0-9a-zA-Z]{1,13}\.[com,cn,net]{1,3}$'

#匹配手机号
#r'^1(3\d|4[4-9]|5[0-35-9]|6[67]|7[013-8]|8[0-9]|9[0-9])\d{8}$'

#匹配身份证号 前6位的地区:[1-9]开头 \d数字出现5个 (18|19|20)\d{2} 出生的年份18几几 19几几 20几几 1800-2099  月份 ((0|[1-9])|(10|11|12)) 日期 (([0-2][1-9])|10|20|30|31) 最后是3个数字, 再加一位 数字或者Xx结尾
#r'^[1-9]\d{5}(18|19|20)\d{2}((0|[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$'

补充:Python的re模块两个比较常用的方法

1、sub()方法:将目标字符串中符合正则匹配的字符替换成我们想要的字符,最终返回结果是一个新的字符串。

语法:sub(pattern,replace,string,count,flags)

参数说明:

   1、pattern:表示匹配模式

   2、replace:表示要替换成的字符串

   3、string:目标字符串

   4、count:可选参数,表示模式匹配后替换的最大次数,默认值为0,表示替换所有匹配。

   5、flags:可选参数,用于控制匹配方式,常用的例如:re.I,表示无视字母大小写匹配。

例:

import re
pattern = "\d+"
string = "Abcde123acb888acd"
#将字符串中的数字替换成”成功“两个字
newstr = re.sub(pattern,"成功",string)
print(newstr)

打印结果:

Abcde成功acb成功acd

增加替换次数:

import re
pattern = "\d+"
string = "Abcde123acb888acd"
newstr = re.sub(pattern,"成功",string,1)
print(newstr)

打印结果:

Abcde成功acb888acd

2、spilit()方法:将目标字符串按照正则匹配的字符串进行切割,最终返回结果是一个列表。

语法:re.split(pattern,string,maxSplit,flags)

参数说明:

1、pattern:正则匹配模式。

2、string:目标字符串。

3、maxSplit:可选参数,按照正则匹配字符串切割的最大切割次数,如果不写表示最大切割。

4、flags:可选参数,用于控制匹配方式,常用的例如:re.I,表示无视字母大小写匹配。

例:

import re
pattern = "\d+"
string = "Abcde123acb888acd"
newstr = re.split(pattern,string)
print(newstr)

打印结果:

['Abcde', 'acb', 'acd']

增加切割次数maxSplit

import re
pattern = "\d+"
string = "Abcde123acb888acd"
newstr = re.split(pattern,string,1)
print(newstr)

打印结果:

['Abcde', 'acb888acd']

总结

到此这篇关于Python正则表达式以及常用匹配的文章就介绍到这了,更多相关Python正则表达式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python正则表达式以及常用匹配实例

本文链接: https://www.lsjlt.com/news/119633.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python正则表达式以及常用匹配实例
    目录1 正则表达式对象2 正则表达式修饰符 - 可选标志3 正则表达式字符意义re.match函数re.search方法替换re.subre.compile 函数findallre....
    99+
    2022-11-11
  • Python中使用正则表达式及正则表达式匹配规则详解
    目录1 导库2 使用模板3 说明4 示例5 正则表达式匹配规则1 导库 import re 2 使用模板 re_pattern = re.compile(pattern, flags...
    99+
    2023-03-22
    Python正则表达式匹配规则 Python正则表达式
  • Python中怎么使用正则表达式及正则表达式匹配规则是什么
    1 导库import re2 使用模板re_pattern = re.compile(pattern, flags=0) result = re.findall(re_pattern,string)3 说明参数描述pattern匹配的正则表...
    99+
    2023-05-14
    Python
  • Python正则表达式匹配中文用法示例
    本文实例讲述了Python正则表达式匹配中文用法。分享给大家供大家参考,具体如下: #!/usr/bin/python #-*- coding:cp936-*-#思路,将str转换成unicode,方可...
    99+
    2022-06-04
    示例 中文 正则表达式
  • Python中正则表达式及其常用匹配函数有哪些
    这篇文章主要介绍Python中正则表达式及其常用匹配函数有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。/简介/Python 自1...
    99+
    2023-06-01
  • MySQL正则表达式匹配查询(含实例)
    目录一、正则表达式介绍二、使用正则表达式测试数据1.基本字符匹配2.OR匹配3.模糊匹配4.匹配范围5.匹配特殊字符6. 匹配字符类7.匹配多个实例8.定位符总结一、正则表达式介绍 ...
    99+
    2022-11-13
  • Python匹配中文的正则表达式
    正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表达式的语言里...
    99+
    2022-06-04
    中文 正则表达式 Python
  • jQuery中常用正则匹配表达式有哪些
    这篇文章主要介绍了jQuery中常用正则匹配表达式有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。jQuery常用正则匹配表达式//整数...
    99+
    2022-10-19
  • python正则表达式如何实现重叠匹配
    目录正则表达式实现重叠匹配正则表达式与正则匹配正则表达式正则匹配正则表达式实现重叠匹配 import regex string = '100101010001' str_re = '...
    99+
    2022-11-11
  • python正则表达式如何实现最小匹配
    这篇文章给大家分享的是有关python正则表达式如何实现最小匹配的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最小匹配格式:量词注:量词有{n,m}、、+、*用处:在字符串中查找符合正则表达式规则的最短子字符串。...
    99+
    2023-06-26
  • Java中正则表达式匹配过程实例详解
    目录下面是Java正则表达式的语法字符:正则表达式简单的匹配过程:(1) 基础匹配过程(2)贪婪模式(3)非贪婪模式 (4)零宽度匹配过程总结正则表达式:定义字符串的模式,...
    99+
    2022-11-13
  • C++实现LeetCode(10.正则表达式匹配)
    [LeetCode] 10. Regular Expression Matching 正则表达式匹配 Given an input string (s) and a pattern ...
    99+
    2022-11-12
  • 怎么使用python正则表达式匹配空格
    使用正则表达式匹配空格的方法是使用`\s`表示空白字符。下面是一个示例代码:```pythonimport re# 匹配所有空白字符pattern = r'\s'text = 'Hello World!'result = re.find...
    99+
    2023-08-11
    python
  • 正则表达式之字符串模式匹配实例详解
    目录前言什么是正则表达式字符范围匹配元字符多次重复匹配定位匹配贪婪模式与非贪婪模式表达式分组结语前言 今天我们来学习正则表达式,正则表达式的应用十分广泛,几乎每个涉及到交互的项目都会...
    99+
    2022-11-13
  • grep正则表达式匹配中括号的方法实例
    目录1. 匹配中括号,例如匹配 String[] args2. 匹配大括号,例如匹配 {abc 123}3. 同时匹配中括号和大括号,例如匹配 new byte[]{6, 55, 7...
    99+
    2022-11-13
  • Notepad++怎么使用正则表达式匹配
    今天小编给大家分享一下Notepad++怎么使用正则表达式匹配的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Notepad+...
    99+
    2023-07-06
  • 正则表达式常见的4种匹配模式小结
    目录0.写在前面1.不区分大小写模式2.点号通配模式3.多行匹配模式4.注释模式5.写在最后0.写在前面 今天一起来学习下正则中的匹配模式,所谓的匹配模式,就是指正则中的一些 改变元...
    99+
    2022-11-12
  • Python中怎么使用正则表达式匹配方法
    本篇文章为大家展示了Python中怎么使用正则表达式匹配方法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。测试正则表达式是否匹配字符串的全部或部分regex=ur"" ...
    99+
    2023-06-17
  • python用正则表达式提取/匹配中文汉字
    目录python用正则表达式提取中文python正则如何匹配中文汉字总结python用正则表达式提取中文 Python re正则匹配中文,其实非常简单,把中文的unicode字符串转...
    99+
    2022-11-11
  • Python中怎么利用正则表达式匹配子串
    本篇文章给大家分享的是有关Python中怎么利用正则表达式匹配子串,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。获取Python正则表达式所匹配的子串(Get the part...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作