0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

python语言之正则re使用方法

冬至配饺子 来源:缪斯之子 作者:肖新苗 2022-08-23 10:35 次阅读

. \w \s \d a|b () [...] {} * +

1. 常用元字符

. 匹配除换行符以外的任意字符

\w 匹配字母或数字或下划线

\s 匹配任意的空白符

\d 匹配数字

\n 匹配一个换行符

\t 匹配一个制表符

^ 匹配字符串的开始

$ 匹配字符串的结尾

\W 匹配非字母或数字或下划线

\D 匹配非数字

\S 匹配非空白符

a|b 匹配字符a或字符b

() 匹配括号内的表达式,也表示一个组

[...] 匹配字符组中的字符

[^...] 匹配除了字符组中字符的所有字符


2. 量词:控制前面的元字符出现的次数


* 重复零次或更多次

+ 重复一次或更多次

? 重复零次或一次

{n} 重复n次

{n,} 重复n次或更多次


3. 贪婪匹配和惰性匹配


.* 贪婪匹配

.*? 非贪婪匹配


'''

点: 匹配所有不包括换行

+: 表示重复一次或者更多次,就是说如果条件一直符合的话,就连续匹配

import re

def test_dot():
data1 = 'hello \n world'
pattern = re.compile(r'.+')
res_list = pattern.findall(data1)
assert ['hello ', ' world'] == res_list, 're dot error'

2.点: 匹配所有包括换行

import re
def test_dot2():
# 有时候需要 . 能匹配所有字符,包括换行符, 就需要带上参数 re.S
data1 = ''

# (.+) 括号说明: 正常会取整个,加括号之后,就只取括号里面的了
ptn = re.compile(r'', re.S)
res_list = ptn.findall(data1)
assert ['hello \n world'] == res_list, 're dot 2 error'

3. \w: 匹配数字、字母 和 下划线

import re
def test_w():
data1 = 'ab_@.121'
# + 表示重复一次或者更多次,就是说如果条件一直符合的话,就连续输出,比如:ab_
ptn = re.compile(r'\w+')
res_list = ptn.findall(data1)
assert ['ab_', '121'] == res_list, 're w error'

4.\s: 匹配任意的空白字符

import re
def test_s():
data1 = 'a b\tc\n d$#'
ptn = re.compile(r'\s+')
res_list = ptn.findall(data1)
assert [' ', '\t', '\n '] == res_list, 're s error'

5.\d: 匹配数字

import re
def test_d():
data1 = 'yidong 10086,liantong 10010'
ptn = re.compile(r'\d+')
res_list = ptn.findall(data1)
assert ['10086', '10010'] == res_list, 're d error'

6.^: 有两个地方用到: 1.本例中的匹配字符串的开始, 2. 在中括号中,取非

import re
def test_start():
data1 = 'ab1ab2'
ptn = re.compile(r'ab\d')
res_list = ptn.findall(data1)
assert ['ab1', 'ab2'] == res_list, 're ^ error'

# ^ 表示只匹配字符串的开始
data1 = 'ab1ab2'
ptn = re.compile(r'^ab\d')
res_list = ptn.findall(data1)
assert ['ab1'] == res_list, 're ^ 2 error'

7.$: 匹配字符串的结束

import re
def test_end():
data1 = '1ab2ab'
ptn = re.compile(r'\dab$')
res_list = ptn.findall(data1)
assert ['2ab'] == res_list, 're $ error'

8. |: a|b 匹配字符串a或字符串b

import re
def test_and():
data1 = '12a_3$dc'
ptn = re.compile(r'\d+|a|d|c')
res_list = ptn.findall(data1)
assert ['12', 'a', '3', 'd', 'c'] == res_list, 're | error'

9. (): 表示一个组

import re
def test_bracket():
data1 = ''
ptn = re.compile(r'')
res_list = ptn.findall(data1)
assert ('1', 'xiaoxinmiao') == res_list[0], 're () error'

10. (): 可以通过?P定义组名

import re
def test_bracket2():
# 可以设置分组名
data1 = ''
ptn = re.compile(r'')
iter_obj = ptn.finditer(data1)
res_obj = iter_obj.__next__()
assert '1' == res_obj.group(
'id') and 'xiaoxinmiao' == res_obj.group('name'), 're () error'

11.(): 当有多组时的例子, 当然这种情况,直接用例子9更方便

import re
def test_bracket3():
# 可以设置分组名
data1 = ''
ptn = re.compile(
r'')
iter_obj = ptn.finditer(data1)
ids, names = [], []
for i in iter_obj:
ids.append(i.group('id'))
names.append(i.group('name'))
assert ['1', '2'] == ids and ['miao1', 'miao2'] == names, 're () error'

12.[]: 匹配字符串中的字符, 其中 - 表示区间,例如:1-9表示1,2,3,4,5,6,7,8,9

import re
def test_bracket_mid():
data1 = '12dss#$$fwe564_'
ptn = re.compile(r'[1-9a-z_$]+')
res_list = ptn.findall(data1)
assert ['12dss', '$$fwe564_'] == res_list, 're [] error'

13.[^]: 匹配除了字符串中的值

import re
def test_bracket_mid2():
data1 = '12dss#$$fwe564_'
# [^] 表示不匹配里面的任何数
ptn = re.compile(r'[^1-9a-z_$]+')
res_list = ptn.findall(data1)
assert ['#'] == res_list, 're [] error'

14. +, * , ? 的理解,但是并不常用, 最常用的还是这个组合 .*?


def test_liangci():
data1 = 'abccd'
# +: 前一个字符出现1次或者多次
re_list = re.findall(r'abc+', data1)
assert ['abcc'] == re_list, 're + error'

# *: 前一个字符出现0次或者多次
re_list = re.findall(r'abf*', data1)
assert ['ab'] == re_list, 're + error'

# ?: 前一个字符出现0次或者1次
re_list = re.findall(r'abc?', data1)
assert ['abc'] == re_list, 're + error'

16. .*?: 非贪婪模式, 直接看例子

import re
def test_star2():
# .* 贪婪
data1 = '我爱北京天安门,天安门上太阳升.'
res_list = re.findall(r'我爱(.*)天安门', data1)
assert ['北京天安门,'] == res_list, 're .* error'
# .*? 非贪婪
res_list = re.findall(r'我爱(.*?)天安门', data1)
assert ['北京'] == res_list, 're .* error'

17. {}: {n}重复多次,{n,}重复多次或者更多次

import re
def test_bracket_big():
# 只有两位数字才符合要求
data1 = 'a1b12c134d1234e'
res_list = re.findall(r'\d{2}', data1)
assert ['12', '13', '12', '34'] == res_list, r're {} error'
# 两位,以及两位以上的数字都符合要求
data1 = 'a1b12c134d1234e'
res_list = re.findall(r'\d{2,}', data1)
assert ['12', '134', '1234'] == res_list, r're {} error'

18. []: 实战,匹配中文

import re
def test_zh():
data1 ='我爱111北京%天安


审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 字符串
    +关注

    关注

    1

    文章

    579

    浏览量

    20533
  • python
    +关注

    关注

    56

    文章

    4797

    浏览量

    84741
  • ASSERT
    +关注

    关注

    0

    文章

    17

    浏览量

    7252
  • Split
    +关注

    关注

    0

    文章

    6

    浏览量

    5577
收藏 人收藏

    评论

    相关推荐

    AB伺服软件使用方法

    AB伺服软件使用方法
    发表于 12-24 14:45 0次下载

    对比Python与Java编程语言

    Python与Java都是目前非常流行的编程语言,它们各有其独特的优势和适用场景。以下是对这两种编程语言的对比: 一、语法和易用性 Python 语法简洁,代码更易读,非常适合初学者。
    的头像 发表于 11-15 09:31 331次阅读

    NPU支持的编程语言有哪些

    与NPU一起使用: C/C++ : C和C++是性能要求较高的应用的首选语言,尤其是在需要直接与硬件交互的场景中。许多NPU硬件都提供了C/C++接口,以便开发者能够充分利用硬件性能。 PythonPython是深度学习和
    的头像 发表于 11-15 09:21 698次阅读

    指定初始器的使用方法及优点

    随着C语言的发展,C99标准引入了一些新的特性,极大地方便了程序员的编码工作。其中一个非常实用且强大的功能便是“指定初始器”(Designated Initializers)。在这篇文章中,我们将深入探讨指定初始器的使用方法及其带来的便利。
    的头像 发表于 08-29 09:51 315次阅读

    DC/DC模拟的基本使用方法和特性确认方法

    本篇介绍了DC/DC模拟的基本使用方法及确认基本特性的方法
    的头像 发表于 08-20 17:08 715次阅读
    DC/DC模拟的基本<b class='flag-5'>使用方法</b>和特性确认<b class='flag-5'>方法</b>

    pytorch和python的关系是什么

    在当今的人工智能领域,Python已经成为了最受欢迎的编程语言之一。Python的易学易用、丰富的库和框架以及强大的社区支持,使其成为了数据科学、机器学习和深度学习等领域的首选语言。而
    的头像 发表于 08-01 15:27 1993次阅读

    Python语言基础2

    电子发烧友网站提供《Python语言基础2.rar》资料免费下载
    发表于 07-17 17:23 1次下载

    Python中的人工智能框架与实例

    在人工智能(AI)领域,Python因其简洁的语法、丰富的库和强大的社区支持,成为了最受欢迎的编程语言之一。本文将详细介绍Python中的人工智能框架,并通过具体实例展示如何使用这些框架来实现不同的人工智能应用。
    的头像 发表于 07-15 14:54 1748次阅读

    使用Python进行自然语言处理

    在探讨使用Python进行自然语言处理(NLP)的广阔领域时,我们首先需要理解NLP的基本概念、其重要性、Python在NLP中的优势,以及如何通过Python实现一些基础的NLP任务
    的头像 发表于 07-04 14:40 459次阅读

    浅谈锡膏的储存及使用方法

    锡膏(焊锡膏)是电子组装过程中常用的材料,它的储存和使用方法对保证焊接质量和性能至关重要。以下是详细的储存及使用方法
    的头像 发表于 06-27 10:02 906次阅读

    可编程电源使用方法

    可编程电源使用方法 可编程电源使用方法 摘要:本文详细介绍了可编程电源的使用方法,包括其基本概念、主要功能、选择原则、操作步骤、注意事项以及实际应用案例,旨在帮助读者全面了解可编程电源
    的头像 发表于 06-10 15:29 1039次阅读

    手柄控制代码及使用方法

    手柄控制代码及使用方法
    的头像 发表于 05-15 10:19 1860次阅读

    Raspberry Pi树莓派使用Python实现MQTT通信设计

    这次的例子,主要讲述如何基于PYTHON的 MQTT 客户端的使用方法
    的头像 发表于 03-14 11:45 834次阅读
    Raspberry Pi树莓派使用<b class='flag-5'>Python</b>实现MQTT通信设计

    四种编程语言之间的区别和联系

    编程语言是一种人与计算机之间进行交流的方式,不同的编程语言有着不同的特点和用途。本文将对四种常见的编程语言——Python、Java、C++和JavaScript进行比较,分析它们的区
    的头像 发表于 02-05 14:16 1592次阅读

    c语言,c++,java,python区别

    C语言、C++、Java和Python是四种常见的编程语言,各有优点和特点。 C语言: C语言是一种面向过程的编程
    的头像 发表于 02-05 14:11 2427次阅读