笔记:Python 字符串与正则表达式(编程题)

发布于:2024-04-26 ⋅ 阅读:(21) ⋅ 点赞:(0)


前言

欢迎阅读本篇笔记,本文将探讨Python编程中字符串与正则表达式的应用。在现代编程中,处理文本数据是一个重要而且常见的任务,而Python提供了丰富的字符串处理和正则表达式支持,使得这一任务变得相对简单和高效。

本文旨在帮助读者深入了解Python中字符串操作和正则表达式的基本知识,并通过一系列编程题目加以实践。首先,我们将介绍Python中字符串的基本操作,包括字符串的创建、索引、切片等。然后,我们将深入探讨正则表达式的基础知识,包括模式匹配、元字符、量词等。最后,我们将提供一些具体的编程题目,帮助读者巩固所学知识,并将其应用于实际场景中。

通过阅读本文,您将掌握如何在Python中高效处理字符串数据,并利用正则表达式强大的模式匹配功能解决实际问题。无论您是初学者还是有一定经验的开发者,本文都将为您提供有益的知识和实践经验。让我们开始吧!

一、Python 字符串与正则表达式是什么?

Python 中的字符串是一种数据类型,用于表示文本数据。字符串是由字符组成的序列,可以使用单引号、双引号或三引号来表示,例如 'hello', "world", '''Python''' 等。Python 提供了丰富的字符串操作方法,包括字符串的拼接、切片、查找、替换等,使得对文本数据的处理变得非常方便。

正则表达式是一种强大的文本匹配和搜索工具,它是由字符和操作符组成的特殊文本模式。正则表达式可以用来检查字符串是否符合某种模式、从字符串中提取特定的信息、替换字符串中的部分内容等。在 Python 中,可以使用内置的 re 模块来使用正则表达式,该模块提供了一组函数来进行正则表达式的匹配和操作。

因此,Python 字符串与正则表达式的结合可以帮助开发者在处理文本数据时更加高效和灵活。通过字符串操作,可以对文本进行基本的处理和操作;而通过正则表达式,可以实现更加复杂和灵活的模式匹配和搜索功能。


二、编程题

编程题目一:字符串反转

题目描述: 编写一个函数,输入一个字符串,返回该字符串的反转形式。

答案与分析:

def reverse_string(s):
    """反转字符串"""
    return s[::-1]

# 测试
original_str = "Hello, world!"
reversed_str = reverse_string(original_str)
print("原始字符串:", original_str)
print("反转后字符串:", reversed_str)

代码分析:

  • [::-1] 使用切片技巧可以很容易地实现字符串的反转。
  • reverse_string 函数接受一个字符串作为参数,然后返回该字符串的反转形式。
  • 在测试部分,我们定义一个原始字符串 original_str,然后通过 reverse_string 函数得到反转后的字符串,并将结果打印出来。

编程题目二:查找字符串中的数字

题目描述: 编写一个函数,输入一个字符串,返回该字符串中所有的数字组成的列表。

答案与分析:

import re

def find_numbers(s):
    """查找字符串中的数字"""
    return re.findall(r'\d+', s)

# 测试
test_str = "I have 2 apples and 3 bananas."
numbers = find_numbers(test_str)
print("原始字符串:", test_str)
print("找到的数字:", numbers)

代码分析:

  • re.findall(r'\d+', s) 使用正则表达式查找字符串中的所有数字。
  • \d+ 是一个正则表达式模式,用于匹配一个或多个数字。
  • find_numbers 函数接受一个字符串作为参数,然后使用 re.findall 函数找到其中的数字,并返回一个列表。
  • 在测试部分,我们定义一个包含数字的字符串 test_str,然后通过 find_numbers 函数找到其中的数字,并将结果打印出来。

编程题目三:检查字符串是否是回文串

题目描述: 编写一个函数,输入一个字符串,判断该字符串是否是回文串(即正着读和反着读都一样)。

答案与分析:

def is_palindrome(s):
    """检查字符串是否是回文串"""
    return s == s[::-1]

# 测试
test_str = "racecar"
result = is_palindrome(test_str)
print("原始字符串:", test_str)
print("是否是回文串:", result)

代码分析:

  • s[::-1] 使用切片技巧可以很容易地实现字符串的反转。
  • is_palindrome 函数接受一个字符串作为参数,然后判断该字符串是否与其反转形式相同,如果相同则是回文串,返回 True;否则返回 False。
  • 在测试部分,我们定义一个回文串 test_str,然后通过 is_palindrome 函数判断该字符串是否是回文串,并将结果打印出来。

编程题目四:统计字符串中每个字符出现的次数

题目描述: 编写一个函数,输入一个字符串,返回一个字典,其中键为字符串中的每个字符,值为该字符在字符串中出现的次数。

答案与分析:

from collections import Counter

def count_characters(s):
    """统计字符串中每个字符出现的次数"""
    return dict(Counter(s))

# 测试
test_str = "hello"
char_count = count_characters(test_str)
print("原始字符串:", test_str)
print("字符出现次数:", char_count)

代码分析:

  • Counter(s) 创建了一个计数器对象,可以统计字符串中每个字符出现的次数。
  • dict() 将计数器对象转换成字典形式。
  • count_characters 函数接受一个字符串作为参数,然后使用 Counter 对象统计每个字符出现的次数,并将其转换成字典形式返回。
  • 在测试部分,我们定义一个字符串 test_str,然后通过 count_characters 函数统计其中每个字符出现的次数,并将结果打印出来。

编程题目五:验证邮箱地址格式是否正确

题目描述: 编写一个函数,输入一个邮箱地址,判断该邮箱地址的格式是否正确。

答案与分析:

import re

def validate_email(email):
    """验证邮箱地址格式是否正确"""
    pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
    return bool(re.match(pattern, email))

# 测试
test_email = "example@email.com"
is_valid = validate_email(test_email)
print("邮箱地址:", test_email)
print("格式是否正确:", is_valid)

代码分析:

  • re.match(pattern, email) 使用正则表达式匹配邮箱地址格式。
  • pattern 是一个正则表达式模式,用于匹配常见的邮箱地址格式。
  • validate_email 函数接受一个邮箱地址作为参数,然后使用 re.match 函数匹配邮箱地址格式,如果匹配成功则返回 True,否则返回 False。
  • 在测试部分,我们定义一个合法的邮箱地址 test_email,然后通过 validate_email 函数验证其格式是否正确,并将结果打印出来。

理解了!下面是五道编程题的答案和分析,每行代码都附有中文注释。

编程题目一:统计字符串中每个单词出现的次数

def count_words(sentence):
    """统计字符串中每个单词出现的次数"""
    # 使用 split() 函数将句子拆分成单词列表
    words = sentence.split()
    # 使用字典存储单词出现的次数
    word_count = {}
    # 遍历单词列表,统计每个单词出现的次数
    for word in words:
        # 如果单词已经在字典中,则将其计数加1
        if word in word_count:
            word_count[word] += 1
        # 如果单词不在字典中,则将其添加到字典,并初始化计数为1
        else:
            word_count[word] = 1
    return word_count

# 测试
sentence = "I have a pen, I have an apple. Uh! Apple pen."
word_frequency = count_words(sentence)
print("句子:", sentence)
print("单词出现次数:", word_frequency)

这个程序首先将句子拆分成单词列表,然后使用字典统计每个单词出现的次数。最后,返回包含单词及其出现次数的字典。


编程题目二:将字符串中的大写字母转换为小写字母

def convert_to_lowercase(s):
    """将字符串中的大写字母转换为小写字母"""
    # 使用 lower() 函数将字符串中的所有大写字母转换为小写字母
    return s.lower()

# 测试
original_str = "Hello, World!"
lowercase_str = convert_to_lowercase(original_str)
print("原始字符串:", original_str)
print("转换后字符串:", lowercase_str)

这个程序使用 lower() 函数将字符串中的所有大写字母转换为小写字母,然后返回转换后的字符串。


编程题目三:检查字符串是否包含特定子串

def check_substring(s, sub):
    """检查字符串是否包含特定子串"""
    # 使用 in 关键字检查子串是否在字符串中出现
    return sub in s

# 测试
test_str = "Hello, World!"
substring = "World"
contains_substring = check_substring(test_str, substring)
print("原始字符串:", test_str)
print("是否包含子串:", contains_substring)

这个程序使用 in 关键字检查子串是否在字符串中出现,然后返回布尔值,表示是否包含该子串。


编程题目四:从字符串中提取数字并求和

import re

def extract_and_sum_numbers(s):
    """从字符串中提取数字并求和"""
    # 使用正则表达式查找字符串中的所有数字
    numbers = re.findall(r'\d+', s)
    # 将找到的数字转换为整数并求和
    return sum(map(int, numbers))

# 测试
test_str = "I have 2 apples and 3 bananas."
total = extract_and_sum_numbers(test_str)
print("原始字符串:", test_str)
print("提取的数字总和:", total)

这个程序使用正则表达式查找字符串中的所有数字,然后将这些数字转换为整数并求和,最后返回总和。


编程题目五:检查字符串是否是有效的密码

import re

def is_valid_password(password):
    """检查字符串是否是有效的密码"""
    # 使用正则表达式检查密码是否符合指定格式
    pattern = r'^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$'
    return bool(re.match(pattern, password))

# 测试
test_password = "P@ssw0rd"
is_valid = is_valid_password(test_password)
print("密码:", test_password)
print("是否有效:", is_valid)

这个程序使用正则表达式检查密码是否符合指定格式,然后返回布尔值,表示密码是否有效。


总结

写总结时,可以回顾文章中涉及的主要内容和编程题目的解决方案,强调学习者通过阅读本文可以掌握的知识和技能。总结还可以提供一些进一步的学习建议或者指向相关资源,帮助读者进一步扩展他们的知识和技能。以下是一个简单的总结示例:


总结

本文介绍了在Python编程中字符串与正则表达式的基本应用。通过学习本文,读者可以掌握以下内容:

  • Python中字符串的基本操作,包括创建、索引、切片等。
  • 正则表达式的基础知识,包括模式匹配、元字符、量词等。
  • 通过编程题目的实践,加深对字符串和正则表达式的理解和应用能力。

在学习之后,读者可以进一步扩展他们的知识:

  • 深入学习正则表达式的高级特性和应用场景。
  • 探索Python中其他字符串处理和文本分析的库,如NLTK、spaCy等。
  • 参与实际项目,将所学知识应用到实践中,提升编程技能。

希望本文能够帮助读者更加深入地理解和应用Python中的字符串和正则表达式,为他们的编程之路带来启发和帮助。