【雕爷学编程】MicroPython手册之内置模块 re:正则表达式的功能

在这里插入图片描述

MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。

MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。

MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。

使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。

总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。

在这里插入图片描述
MicroPython的内置模块re是一个用于实现简单的正则表达式操作的模块,它可以用来在字符串中进行模式匹配,替换,分割等操作。它的主要特点是:

1、它可以使用compile()方法将一个正则表达式字符串编译为一个正则表达式对象,以提高匹配效率和复用性。
2、它可以使用match()和search()方法在一个字符串中查找第一个匹配的位置,或使用sub()方法在一个字符串中替换所有匹配的子串。
3、它可以使用split()方法根据一个正则表达式将一个字符串分割为多个子串。
4、它可以使用group(), groups(), start(), end(), span()等方法获取匹配对象的详细信息,如匹配的子串,分组,位置等。
5、它支持一些常用的正则表达式语法,如字符集,量词,分组,选择,转义等,但不支持一些高级的语法,如命名组,非捕获组,断言等。

re模块的应用场景有:

1、用于进行一些文本处理或分析的任务,例如验证输入格式,提取信息,清洗数据等。
2、用于实现一些复杂的字符串操作或逻辑,例如密码检查,模板替换,语法分析等。
3、用于学习或教授一些正则表达式相关的知识或技巧,例如元字符,贪婪与非贪婪,回溯等。

re模块的注意事项有:

1、re模块实现了CPython模块的一个子集1,并且不支持转义字符本身1,因此不能完全兼容CPython的功能和性能。
2、re模块使用了一种基于POSIX扩展正则表达式的语法12,与其他语言或工具可能有所不同,需要注意语法上的差异和兼容性问题。
3、re模块使用的回调函数是在中断上下文中执行1234,需要尽量简短和快速,避免执行复杂或耗时的操作,以免影响系统性能和稳定性。

以下是MicroPython的内置模块re几个实际运用程序案例:

案例一:使用re.match()方法验证邮箱地址格式

# 导入re模块
import re

# 定义一个邮箱地址格式的正则表达式
email_regex = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'

# 编译正则表达式为一个正则表达式对象
email_pattern = re.compile(email_regex)

# 定义一个函数,用于验证邮箱地址格式
def validate_email(email):
    # 调用match()方法,在邮箱地址中查找第一个匹配
    match = email_pattern.match(email)
    # 如果找到了匹配,则返回True
    if match:
        return True
    # 否则返回False
    else:
        return False

# 测试函数
# 使用一些有效和无效的邮箱地址进行测试,并打印结果
emails = ['alice@example.com', 'bob@gmail.co.uk', 'charlie@invalid', 'david@123.com.']
for email in emails:
    print(email, validate_email(email))

案例二:使用re.sub()方法替换敏感词

# 导入re模块
import re

# 定义一个敏感词列表
bad_words = ['stupid', 'idiot', 'fool']

# 将敏感词列表连接成一个正则表达式字符串,并添加边界符
bad_words_regex = r'\b(' + '|'.join(bad_words) + r')\b'

# 编译正则表达式为一个正则表达式对象
bad_words_pattern = re.compile(bad_words_regex, re.IGNORECASE)

# 定义一个函数,用于替换敏感词
def censor(text):
    # 调用sub()方法,在文本中替换所有匹配的敏感词为'*'号,并返回新的文本
    return bad_words_pattern.sub('*', text)

# 测试函数
# 使用一些包含敏感词的文本进行测试,并打印结果
texts = ['You are so stupid!', 'He is an idiot.', 'Don\'t be a fool.']
for text in texts:
    print(censor(text))

案例三:使用re.split()方法分割单词

# 导入re模块
import re

# 定义一个非单词字符的正则表达式
non_word_regex = r'\W+'

# 编译正则表达式为一个正则表达式对象
non_word_pattern = re.compile(non_word_regex)

# 定义一个函数,用于分割单词
def split_words(text):
    # 调用split()方法,根据非单词字符将文本分割为多个单词,并返回一个列表
    return non_word_pattern.split(text)

# 测试函数
# 使用一些包含非单词字符的文本进行测试,并打印结果
texts = ['Hello, world!', 'This is a test.', 'MicroPython is awesome.']
for text in texts:
    print(split_words(text))

案例四:匹配字符串模式:

import re

# 定义一个字符串
text = "Hello, my name is John. I live in New York."

# 使用正则表达式匹配名字
pattern = r"my name is (\w+)"
match = re.search(pattern, text)

if match:
    name = match.group(1)
    print("Name:", name)
else:
    print("Name not found.")

在这个示例中,我们使用re模块的search()函数来匹配一个字符串中的特定模式。我们定义了一个字符串text,然后使用正则表达式模式my name is (\w+)来匹配其中的名字。如果匹配成功,我们提取出匹配的名字并打印出来。如果匹配失败,则打印出名字未找到的消息。

案例五:替换字符串中的内容:

import re

# 定义一个字符串
text = "Hello, my name is John. I live in New York."

# 使用正则表达式替换名字
pattern = r"John"
replacement = "Michael"
new_text = re.sub(pattern, replacement, text)

print("New Text:", new_text)

在这个示例中,我们使用re模块的sub()函数来替换字符串中的特定内容。我们定义了一个字符串text,然后使用正则表达式模式John来匹配其中的名字。然后,我们将匹配到的名字替换为Michael,并将结果存储在new_text变量中。最后,我们打印出替换后的字符串。

案例六:分割字符串:

import re

# 定义一个字符串
text = "apple, banana, orange, mango, kiwi"

# 使用正则表达式分割字符串
pattern = r",\s*"
fruits = re.split(pattern, text)

print("Fruits:", fruits)

在这个示例中,我们使用re模块的split()函数来根据特定模式分割字符串。我们定义了一个字符串text,其中包含多个水果名字,它们由逗号和空格分隔。然后,我们使用正则表达式模式,\s*来匹配逗号和可能的多个空格。通过split()函数,我们将字符串分割为水果名字的列表,并将结果存储在fruits变量中。最后,我们打印出水果列表。这些实际运用程序案例展示了使用MicroPython内置模块re的功能。通过使用re模块,可以匹配字符串模式、替换字符串内容以及分割字符串。这些功能在文本处理、数据清洗和提取等场景中非常有用。

案例七:正则表达式匹配

import re

# 匹配邮箱地址
email = "example@example.com"
pattern = r"\w+@\w+\.\w+"
match = re.match(pattern, email)
if match:
    print("邮箱地址有效")
else:
    print("邮箱地址无效")

在这个例子中,我们导入了 re 模块,并使用它进行正则表达式的匹配。我们定义了一个邮箱地址 email,然后使用正则表达式模式 r"\w+@\w+.\w+" 对邮箱地址进行匹配。我们使用 match() 函数进行匹配,并检查是否存在匹配结果。如果存在匹配结果,说明邮箱地址有效,我们打印出 “邮箱地址有效”;否则,说明邮箱地址无效,我们打印出 “邮箱地址无效”。这个例子展示了如何使用 re 模块进行正则表达式的匹配。

案例八:字符串分割

import re

# 分割字符串
text = "Hello,World! How are you?"
pattern = r"[,\s!]+"
result = re.split(pattern, text)
print("分割结果:", result)

在这个例子中,我们导入了 re 模块,并使用它进行字符串的分割操作。我们定义了一个字符串 text,然后使用正则表达式模式 r"[,\s!]+" 对字符串进行分割。该模式表示逗号、空格和感叹号可以作为分割符号。我们使用 split() 函数进行分割,并将结果存储在 result 变量中。最后,我们打印分割结果。这个例子展示了如何使用 re 模块进行字符串的分割操作。

案例九:正则表达式替换

import re

# 替换字符串中的数字
text = "I have 3 apples and 5 oranges."
pattern = r"\d+"
replacement = "X"
result = re.sub(pattern, replacement, text)
print("替换结果:", result)

在这个例子中,我们导入了 re 模块,并使用它进行正则表达式的替换操作。我们定义了一个字符串 text,其中包含一些数字。然后,我们使用正则表达式模式 r"\d+" 搜索字符串中的数字。我们使用 sub() 函数进行替换操作,将找到的数字替换为字符串 “X”。最后,我们打印替换结果。这个例子展示了如何使用 re 模块进行正则表达式的替换操作。

这些示例展示了在 MicroPython 中使用 re 模块的实际应用。re 模块提供了对正则表达式的支持,包括匹配、分割和替换等功能。通过利用 re 模块,你可以在 MicroPython 中对文本进行复杂的模式匹配和处理。

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值