Python for Informatics 第11章之正则表达式(二)

  • Post category:Python

PythonforInformatics第11章之正则表达式(二)

在PythonforInformatics第11章中,我们学习了正则表达式的基础知识和语法,本文将继续讲解正则表达式的高级应用,包括组、量词、贪婪模式、非贪婪模式等。

分组

在正则表达式中,可以使用()来表示分组,分组可以将多个字符看作一个整体,方便进行匹配、查找、替换等操作。例如,我们可以使用以下正则表达式匹配一个字符串中的电话号码:

import re

s = "My phone number is 123-456-7890."
pattern = r'(\d{3})-(\d{3})-(\d{4})'
result = re.search(pattern,)
print(result.group())

输出结果为:

123-456-7890

在上面的示例中,我们使用正则表达式”(\d{3})-(\d{3})-({4})”匹配一个字符串中的电话号码,并使用re模块的search()函数查找第一个配项。由于正则表达式中使用了分组,因此可以使用group()函数获取整个匹配项。

量词

在正则表达式中,可以使用量词来表示匹配次数,常用的量词包括*、+、?、{n}、{n,}、{n,m}等。例如,我们可以使用以下正则表达式匹配一个字符串中的多个数字:

import re

s = "abc123def456ghi789"
pattern = r'\d+'
result = re.findall(pattern, s)
print(result)

输出结果为:

['123', '456', '789']

在上面的示例中,我们使用正则表达”\d+”匹配一个字符串中的多个数字,并使用re模块的findall()函数查找所有匹配项。

贪婪模式和非贪婪模式

在正则表达式中,量词默认是贪婪模式,即尽可能多地匹配字符。例如我们可以使用以下正则表达式匹配一个字符串中的HTML标签:

import re

s = "<html><head><title>Title</title></head><body>Body</body></html>"
pattern = r'<.*>'
result = re.search(pattern, s)
print(result.group())

输出结果为:

<html><head><title</title></head><body>Body</body></html>

在上面的示例中,我们使用正则表达式”<.*>”匹配一个字符串中的HTML标签,并使用re模块的search()函数查找第一个匹配项。由于量词默认是贪婪模式,因此匹配结果包含了整个HTML文档。

如果我们想要使用非贪婪模式,即尽可能少地匹配字符,可以在量词后面加上?。例如,我们可以使用以下正则表达式匹配一个字符串中的HTML标签:

import re

s = "<html><head><title>Title</title></head><body>Body</body></html>"
pattern = r'<.*?>'
result = re.search(pattern, s)
print(result.group())

输出结果为:

<html>

在上面的示例中,我们使用正则表达式”<.*?>”匹配一个字符串中的HTML标签,并使用re模块的search()函数查找第一个匹配项。由于量词使用了非贪婪模式,因此匹配结果只包含了第一个HTML标签。

示例一

假设我们有一个含中文字符串,包含以下内容:

s = "我爱Python编程"

我们想要使用正则表达式匹配字符串中的所有字,可以使用以下代码:

import re

pattern = r'[\u4e00-\u9fa5]+'
result = re.findall(pattern, s)
print(result)

输出结果为:

['我', '爱', '编程']

在上面的示例中,我们使用正则表达式”[\u4e00-\u9fa5]+”匹配所有汉字,并使用re模块的findall()函数查找所有匹配的子串。

示例二

假设我们有一个含中文字符串,包含以下内容:

s = "Python编程很有趣,但是需要耐心和细心。"

我们想要使用正则表达式匹配字符串中的所有中文字符和标点符号,可以使用以下代码:

import re

pattern = r'[\u4e00-\u9fa5,。?!]+'
result = re.findall(pattern, s)
print(result)

输出结果为:

['Python编程很有趣', '但是需要耐心和细心', '。']

在上面的示例中,我们使用正则表达式”[\u4e00-\u9fa5,。?!]+”匹配所有中文字符和标点符号,并使用re模块的findall()函数查找匹配的子串。

总结

本文详细讲解了PythonforInformatics第11章中正则表达式的高级应用,包括分组、量词、贪婪模式、非贪婪模式等。在实际应用中,我们可以根据需要选择合适的正则表达式和re模块的函数,实现字符串的匹配、查找、替换等操作。同时,我们还讲解了Python下含中文字符串正则表达式的编码问题,并提供了两个示例说明。在实际应用中,我们需要根据字符串的编码方式和正则表达式的编码方式选择合适的编码方式,以确保正则表达式的匹配效果。