返回顶部
首页 > 资讯 > 后端开发 > Python >python re模块
  • 840
分享到

python re模块

模块python 2023-01-30 21:01:31 840人浏览 泡泡鱼

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

摘要

正则表达式(可以称为REs,regex,regex pattens)是一个小巧的,高度专业化的编程语言,它内嵌于python开发语言中,可通过re模块使用。正则表达式的pattern可以被编译成一系列的字节码,然后用C编写的引擎执行。常用正

正则表达式(可以称为REs,regex,regex pattens)是一个小巧的,高度专业化的编程语言,它内嵌于python开发语言中,可通过re模块使用。正则表达式的pattern可以被编译成一系列的字节码,然后用C编写的引擎执行。


常用正则表达式符号,基本上,包含了90%的场景。

'.'默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
'^'匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
'$'匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以
'*'匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac")  结果为['abb', 'ab', 'a']
'+'匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果['ab', 'abb']
'?'匹配前一个字符1次或0次
'{m}'匹配前一个字符m次
'{n,m}'匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果'abb', 'ab', 'abb']
'|'匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果'ABC'
'(...)'分组匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 结果 abcabca456c
'\A'只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的
'\Z'匹配字符结尾,同$
'\d'匹配数字0-9
'\D'匹配非数字
'\w'匹配[A-Za-z0-9]
'\W'匹配非[A-Za-z0-9]
's'匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 '\t'
'(?P<name>...)'分组匹配

最常用的匹配语法

re.match 从头开始匹配
re.search 匹配包含
re.findall 把所有匹配到的字符放到以列表中的元素返回
re.splita 以匹配到的字符当做列表分隔符
re.sub      匹配字符并替换

反斜杠的困扰
与大多数编程语言相同,正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\\"表示。同样,匹配一个数字的"\\d"可以写成r"\d"。有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。

举个列子:

匹配以Chen开头的字符串

import re
result = re.match("^Chen","ChenLong")
print(result)

执行输出

_sre.SRE_Match object; span=(0, 4), match='Chen'

结果是一个匹配对象,请注意结尾的match='Chen' 表示匹配出了Chen

如果没有匹配上,结果为None


打印匹配结果,使用group()方法查看

print(result.group())

执行输出 Chen

注意:如果没有匹配上,使用group()会报错。


上面的正则匹配规写死了,比如^Chen 这种需求,用in方法就可以实现了。

下面说一个简单的例子

匹配以Chen开头的以及后面的数字

import re
result = re.match("^Chen\d","Chen356Long")
print(result.group())

执行输出

Chen3


注意:

\d 表示匹配一个数字

如果想要匹配多个数字,使用\d+

import re
result = re.match("^Chen\d+","Chen356Long")
print(result.group())

执行输出

Chen356


匹配任意字符.+

res = re.match(".+","Chen321Long123")
print(res.group())

执行输出

Chen321Long123


匹配单个字符.

res = re.match(".","Chen321Long123")
print(res.group())

执行输出: C


匹配Long

res = re.match("^L.+g","Chen321Long123")
print(res)

执行输出: None

为什么呢?因为match是从左至右匹配,由于Long在字符串的中间,写任何正则都无法匹配出Long。

需要用到另外一个方法search,表示从整个文本中去搜索。结果只会返回一次,如果有多个结果,会返回第一个结果。

res = re.search("L.+g","Chen321Long123")
print(res.group())

执行输出: Long


如果使用L.+g$ 是匹配不到Long的,为什么呢?

$表示匹配整个字符串的结尾,而结尾是3。由于123不是我想要的,所以不能写g$


由于.+是匹配任意字符,如果只想匹配字母呢?使用[a-z]

res = re.search("L[a-z]+g","Chen321Long123")

匹配所有字母大小写呢?使用[a-zA-Z]

res = re.search("L[a-zA-Z]+g","Chen321Long123")


匹配jack

res = re.search("[a-z]+k","123#tom#jack#rose")
print(res)

执行输出:

_sre.SRE_Match object; span=(8, 12), match='jack'


'?' 匹配前一个字符1次或0次

匹配字母a

res = re.search("a?","alin")
print(res)

执行输出:

_sre.SRE_Match object; span=(0, 1), match='a'


匹配字母a

res = re.search("a?","lina")
print(res)

执行输出:

_sre.SRE_Match object; span=(0, 0), match=''

结果显示没有匹配上,请注意,? 可以匹配0次,也就是不匹配的情况。所以它的结果不是None


'?' 匹配前一个字符1次或0次


匹配aa或者aaa

res = re.search("aaa?","aalinaaa")
print(res)

执行输出:

_sre.SRE_Match object; span=(0, 2), match='aa'


请注意aaa? 需要拆分一下aa和aaa? 为什么呢? '?'是匹配0次或者1次数

aaa?匹配0次就是aa,匹配1次,就是aaa?


'{m}' 匹配前一个字符m次

匹配3个数字

res = re.search("[0-9]{3}","aa1x2a345aa")
print(res)

执行输出:

_sre.SRE_Match object; span=(6, 9), match='345'


匹配1到3次

res = re.search("[0-9]{1,3}","aa1x2a345aa")
print(res)

执行输出:

_sre.SRE_Match object; span=(2, 3), match='1'


匹配所有数字

res = re.search("[0-9]+","aa1x2a345aa")
print(res)

执行输出:

_sre.SRE_Match object; span=(2, 3), match='1'


为什么只有一个1呢?因为search只会返回一个结果,后续的不再返回。这个时候,需要用到findall方法

注意:findall没有group()方法

res = re.findall("[0-9]+","aa1x2a345aa")
print(res)

执行输出:

['1', '2', '345']


所有的数字,都匹配出来了。


只匹配第3次的结果

res = re.findall("[0-9]{3}","aa1x2a345aa")
print(res)

执行输出:

['345']


'|' 匹配|左或|右的字符


匹配abc或者ABC

res = re.findall("abc|ABC","ABCBabcCD")
print(res)

执行输出:

['ABC', 'abc']


'(...)'分组匹配


匹配abc,在匹配c 2次

res = re.search("abc{2}","xiabccc")
print(res)

执行输出:

_sre.SRE_Match object; span=(2, 6), match='abcc'


复杂的例子

匹配abc 2次,匹配||= 2次。注意:\| 转义了,表示|

res = re.search("(abc){2}(\|\|=){2}","abcabc||=||=")
print(res)

执行输出:

_sre.SRE_Match object; span=(0, 12), match='abcabc||=||='


'\A'只从字符开头匹配

'\Z'匹配字符结尾,同$


'\A' 效果和'^' 是一样的。


匹配以数字开头,字母结尾

res = re.search("\A[0-9]+[a-z]\Z","123a")
print(res)

执行输出:

_sre.SRE_Match object; span=(0, 4), match='123a'


'\d' 匹配数字

res = re.search("\A\d+[a-z]\Z","123a")
print(res)

执行输出:

_sre.SRE_Match object; span=(0, 4), match='123a'


'\D' 匹配非数字

匹配非数字

res = re.search("\D+","123a$ -\n")
print(res)

执行输出:

_sre.SRE_Match object; span=(3, 8), match='a$ -\n'


'\w'匹配[A-Za-z0-9]

res = re.search("\w+","1dF23$- \r\na")
print(res)

执行输出:

_sre.SRE_Match object; span=(0, 5), match='1dF23'


'\W'匹配非[A-Za-z0-9]

res = re.search("\W+","1dF23$- \r\na")
print(res)

执行输出:

_sre.SRE_Match object; span=(5, 10), match='$- \r\n'


's'匹配空白字符、\t、\n、\r

res = re.search("\s+","1dF23$- \r\na")
print(res)

执行输出:

_sre.SRE_Match object; span=(7, 10), match=' \r\n'


'(?P<name>...)' 分组匹配 


组名为id,匹配数字

res = re.search("(?P<id>[0-9]+)","abcd1234daf@34")
#使用groupdict()方法打印组名
print(res.groupdict())

执行输出:

{'id': '1234'}


再添加一个分组name,匹配字母大小写

res = re.search("(?P<id>[0-9]+)(?P<name>[a-zA-Z]+)","abcd1234daf@34")
print(res.groupdict())

执行输出:

{'name': 'daf', 'id': '1234'}

返回的结果是一个字典,如果想取值的话,使用如下方法:

res = re.search("(?P<id>[0-9]+)(?P<name>[a-zA-Z]+)","abcd1234daf@34")
print(res.groupdict())
#第一种方法,直接传值
print(res.group("id"))
#第二种方法,用字典的方式
print(res.groupdict()['name'])

执行输出:

{'id': '1234', 'name': 'daf'}

1234

daf


举个复杂的例子

身份证号,前2位是省,再后面2位是市,再后面2位是区,再后面8位是出生日期

res = re.search("(?P<province>[0-9]{2})(?P<city>[0-9]{2})(?P<area>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city")
print(res)

执行输出:

{'birthday': '1993', 'city': '14', 'province': '37', 'area': '81'}


re.split 以匹配到的字符当做列表分隔符


res = re.split("[0-9]","abc12de3f45GH")
print(res)

执行输出:

['abc', 'de', 'f', 'GH']


re.sub   匹配字符并替换

res = re.sub("[0-9]+","|","abc12de3f45GH")
print(res)

执行输出:

abc|de|f|GH


只替换一个

res = re.sub("[0-9]+","|","abc12de3f45GH",count=1)
print(res)

执行输出:

abc|de3f45GH


仅需轻轻知道的几个匹配模式

re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
M(MULTILINE): 多行模式,改变'^'和'$'的行为(参见上面)
S(DOTALL): 点任意匹配模式,改变'.'的行为


忽略大小写

res = re.search("[a-z]+","abcA",flags=re.I)
print(res)

执行输出:

_sre.SRE_Match object; span=(0, 4), match='abcA'


res = re.search(r"^a","\nabc\neee",flags=re.M)
print(res)

执行输出:

_sre.SRE_Match object; span=(1, 2), match='a'


匹配任意字符

res = re.search(r".+","\nabc\neee",flags=re.S)
print(res)

执行输出:

_sre.SRE_Match object; span=(0, 8), match='\nabc\neee'



--结束END--

本文标题: python re模块

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

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

猜你喜欢
  • 【Python】re模块
    一、re模块简介及操作方法 正则表达式其本身就是一种小型的,高度专业化的编程语言。在Python中,它被内 嵌在了re模块里面,正则表达式模式被编译成一系列的字节码,然后由用C编写的匹 配引擎执行。 1、re.se...
    99+
    2023-09-30
    正则表达式
  • python re模块
    正则表达式(可以称为REs,regex,regex pattens)是一个小巧的,高度专业化的编程语言,它内嵌于python开发语言中,可通过re模块使用。正则表达式的pattern可以被编译成一系列的字节码,然后用C编写的引擎执行。常用正...
    99+
    2023-01-30
    模块 python
  • python之re模块
    python 中使用正则表达式需要引入re模块,用来匹配处理字符串  如: import re #第一步,要引入re模块 a = re.findall("匹配规则", "要匹配的字符串") #第二步,调用模块函数 以列表形式返回匹配到的字...
    99+
    2023-01-30
    模块 python
  • Python re模块详解
    今天学习测试了一下Python中的正则表达式的模块用法。初学 Python ,对 Python 的文字处理能力有很深的印象,除了 str 对象自带的一些方法外,就是正则表达式这个强大的模块了。但是对于初学者来说,要用好这个功能还是有点难度,...
    99+
    2023-01-31
    详解 模块 Python
  • python学习-re模块
    Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,在文本解析、复杂字符串分析和信息提取时是一个非常有用的工具,下面我主要总结了re的常用方法。1.re的简介    使用python...
    99+
    2023-01-31
    模块 python
  • re模块
    1.匹配单个字符 字符 功能 . 匹配任意1个字符(除了\n) [ ] 匹配[ ]中列举的字符 \d 匹配数字,即0-9 \D 匹配非数字,即不是数字 \s 匹配空白,即 空格,tab键 \S 匹配非空白...
    99+
    2023-01-30
    模块
  • Python之re模块详解
    目录Python——re模块 简介预定义字符特殊字符反斜杠问题匹配方法总结Python——re模块  简介 定义:re模块称为正则表达式; 作用:创建一个"规则表...
    99+
    2024-04-02
  • Python的Re模块怎么用
    这篇文章主要介绍Python的Re模块怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、基础语法总结1.1、匹配单个字符a . d D w W s S [...] [^...]匹配单个字符(.)规则:匹配除换行...
    99+
    2023-06-17
  • python re模块常见函数
    re.match()函数 如果想要从源字符串的起始位置匹配一个模式,我们可以使用re.match()函数。re.match()函数的使用格式是:re.match(pattern, string, flag) re.search()函数 我们...
    99+
    2023-01-31
    函数 模块 常见
  • #19 re&jieba模块
    前言 在Python中,需要对字符串进行大量的操作,有时需要从一个字符串中提取到特定的信息,用切片肯定是不行的,所有这一节记录两个强大的文本处理模块,一个是正则表达式re模块,另一个是中文处理模块jieba,Here wo go! 一、r...
    99+
    2023-01-30
    模块 jieba
  • Python之re模块案例详解
    一、正则表达式      re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符...
    99+
    2024-04-02
  • python re模块 正则表达式
    导航: 1、正则表达式元字符2、预定义字符集3、re模块常用函数4、注意事项 正则表达式在很多语言里都支持,python也不例外,re模块就是正则表达式的应用 正则表达式对字符串的逻辑操作,主要是对字符串的一种过滤,用“元字符” 与“普通...
    99+
    2023-01-30
    模块 正则表达式 python
  • python正则表达式模块re
    正则表达式的特殊元素 匹配符号 描述 '.'(点dot) 在默认模式下,它匹配除换行符之外的任何字符。如果指定了DOTALL标志,则匹配包括换行符在内的任何字符 '^'(Caret) 匹配以字符串开头,...
    99+
    2023-01-30
    模块 正则表达式 python
  • Python常用模块re的使用
    一.re模块的查找方法:  1.findall 匹配所有每一项都是列表中的一个元素 import reret = re.findall('\d+','asd鲁班七号21313') # 正则表达式,待匹配的字符串,flag# ret ...
    99+
    2023-01-31
    模块 常用 Python
  • 关于Python正则表达式模块之re模块
    目录前言:导入模块1.re.match() 函数(1)匹配单个字符(2)匹配多个字符 字符功能/说明位置*(3) 匹配开头和结尾2.re.search() 函数3.re.findal...
    99+
    2023-05-16
    Python正则表达式 Pythonre模块
  • 怎么在python中使用re模块
    本篇文章为大家展示了怎么在python中使用re模块,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其...
    99+
    2023-06-14
  • python--模块之re正则表达式
    简介: 正则表达式本身是一个小型的、高度专业化的编程语言,而在python中,通过内嵌集成re模块,我们可以通过直接调用来实现正则匹配。 正则表达式基础知识: --普通字符匹配自身 abc ----abc --元字符 . :匹...
    99+
    2023-01-30
    模块 正则表达式 python
  • python模块之re(正则表达式)
    匹配模式 re.ASCII同re.A,对应的内联标识为(a),用于向后兼容。使元字符\w, \W, \b, \B, \d, \D, \s和\S仅匹配ASCII字符。该模式只在string模式下有意义,在byte模式下将被忽略。 re.DE...
    99+
    2023-01-31
    模块 正则表达式 python
  • python自动化之re模块详解
    目录一、re是什么?二、re 模块的作用三、re模块的使用1、常用方法2、 元字符3、多字符匹配4、分组匹配5、match()方法的使用6、 search():在字符串中搜索,返回搜...
    99+
    2024-04-02
  • python中re模块的详细介绍
    本篇内容介绍了“python中re模块的详细介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!正则表达式的元字符有. ^ $ * { [ ...
    99+
    2023-06-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作