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

    文章

    594

    浏览量

    23034
  • python
    +关注

    关注

    57

    文章

    4856

    浏览量

    89554
  • ASSERT
    +关注

    关注

    0

    文章

    17

    浏览量

    7622
  • Split
    +关注

    关注

    0

    文章

    6

    浏览量

    5735
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    芯源IR调制器都有哪些具体使用?使用方法是怎样的?

    芯源IR调制器都有哪些具体使用?以及使用方法是怎样的?
    发表于 12-02 06:33

    堆栈的定义,堆栈的使用方法

    和使用; 对于8086CPU,进出堆栈的只能是2字节的数据。 2 堆栈的使用方法 常用的堆栈相关指令包括PUSH POP PUSHF和POPF,语法如下: PUSH 源操作数;将指定操作数入栈保护 POP
    发表于 11-21 06:49

    一文了解Mojo编程语言

    资源受限环境,如物联网设备或实时控制系统。 总的来说,Mojo 的独特之处在于它填补了 Python 与底层语言之间的性能鸿沟,同时保持了开发者熟悉的语法和生态。随着其工具链的完善,Mojo 有望成为 AI 和高性能计算领域的重要工具。
    发表于 11-07 05:59

    EMC之RE问题那些事儿

    通过插拔线束定位干扰路径来自哪儿。两种方式没有绝对的好与不好,根据不同的产品的类型和失效频点是窄带还是宽带,选择不同的方法。二问题背景车载导航产品在做RE辐射实验
    的头像 发表于 09-02 11:42 3866次阅读
    EMC之<b class='flag-5'>RE</b>问题那些事儿

    Re-Driver 和 Re-Timer 有什么区别?

    Re-Driver 和 Re-Timer 有什么区别?
    发表于 08-21 06:14

    C++ 与 Python:树莓派上哪种语言更优?

    Python是树莓派上的首选编程语言,我们的大部分教程都使用它。然而,C++在物联网项目中同样广受欢迎且功能强大。那么,在树莓派项目中选择哪种语言更合适呢?Python因其简洁性、丰富
    的头像 发表于 07-24 15:32 634次阅读
    C++ 与 <b class='flag-5'>Python</b>:树莓派上哪种<b class='flag-5'>语言</b>更优?

    锡膏的储存及使用方法详解

    锡膏是一种常用的焊接辅助材料,广泛应用于电子、电器、通讯、仪表等行业的焊接工艺中。正确的储存和使用方法对于保证锡膏的品质和焊接效果至关重要。本文将就锡膏的储存和使用方法进行详细介绍,希望能对广大焊接工作者有所帮助。
    的头像 发表于 07-18 17:36 1050次阅读
    锡膏的储存及<b class='flag-5'>使用方法</b>详解

    LCR测试仪的使用方法与注意事项

    LCR测试仪的使用方法、操作注意事项及常见故障处理,帮助读者高效、安全地掌握这一仪器的使用技巧。   二、LCR测试仪的基本使用方法 1. 准备阶段 (1)设备检查:确保测试仪电源线、连接线完好,电源开关关闭。检查测试夹具或探针
    的头像 发表于 04-29 10:36 5202次阅读
    LCR测试仪的<b class='flag-5'>使用方法</b>与注意事项

    西门子PLC-模拟量采集计算使用方法

    西门子PLC-模拟量采集计算使用方法,很实用
    发表于 04-09 15:29 0次下载

    零基础入门:如何在树莓派上编写和运行Python程序?

    是一种非常有用的编程语言,其语法易于阅读,允许程序员使用比汇编、C或Java等语言更少的代码行。Python编程语言最初实际上是作为Linux的脚本
    的头像 发表于 03-25 09:27 1515次阅读
    零基础入门:如何在树莓派上编写和运行<b class='flag-5'>Python</b>程序?

    精密空调操作使用方法详解

    精密空调操作使用方法详解
    的头像 发表于 02-10 14:44 1882次阅读
    精密空调操作<b class='flag-5'>使用方法</b>详解

    快速了解电源模块的使用方法

    电源是整个电路可靠工作的核心部分。然而,由于电源电路的电流和发热量较大,容易出现故障。今天我为大家介绍一下电源模块的使用方法
    的头像 发表于 01-21 15:24 1391次阅读

    瑞芯微开发板/主板Android系统APK签名文件使用方法,实用干货

    瑞芯微主板/开发板Android系统,APK系统签名文件使用方法
    的头像 发表于 12-26 09:43 1498次阅读
    瑞芯微开发板/主板Android系统APK签名文件<b class='flag-5'>使用方法</b>,实用干货

    Triton编译器支持的编程语言

    Triton编译器支持的编程语言主要包括以下几种: 一、主要编程语言 Python :Triton编译器通过Python接口提供了对Triton语言
    的头像 发表于 12-24 17:33 1446次阅读

    AB伺服软件使用方法

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