1. 题目
1.1 题目来源:
Python编程快速上手——让繁琐工作自动化(第二版),第7章:模块匹配与正则表达式;
7.18 实践项目;7.18.3strip()
的正则表达式版本
1.2 题目描述:任务:请编写一个满足所有要求的Python程序。
程序要求名称:strip()的正则表达式版本
程序要求:这个程序,它接收一个字符串,做的事情和strip()字符串的方法一样。如果只传入了要去除的字符串,没有其它参数,那么就从该字符串的首尾去除空白字符;否则,函数第二个参数制定的字符将从该字符串中去除。
2. 解答
2.1 完整代码
import re
def re_strip(s, chars=None):
"""
这个函数实现了类似于字符串的strip()方法的功能
参数:
s (str): 要处理的原始字符串
chars (str, 可选): 指定要去除的字符,如果未提供则默认去除空白字符
只去除首尾匹配的字符,中间的字符不去除
返回:
str: 处理后的字符串
"""
# 判断是否传入了第二个参数chars
if chars is None:
# 如果没有指定要去除的字符,默认去除空白字符(包括空格、制表符、换行符等)
pattern = r'^\s+|\s+$'
return re.sub(pattern, '', s)
else:
# 如果指定了要去除的字符,构建正则表达式模式
pattern = f'^[{re.escape(chars)}]+|[{re.escape(chars)}]+$'
return re.sub(pattern, '', s)
# 测试函数
if __name__ == '__main__':
print(re_strip(" Hello World! "))
print(re_strip("***Hello Python!***", "*"))
2.2 完整代码
# 导入模正则表达式模块
import re
def improved_re_strip(s, chars=None):
"""
改进后的函数实现类似于字符串的strip()方法的功能
参数:
s (str): 要处理的原始字符串
chars (str, 可选): 指定要去除的字符,如果未提供则默认去除空白字符
⚠️注意:去除所有匹配到的字符,包括开头和结尾的空白字符
返回:
str: 处理后的字符串
"""
# 判断是否传入了第二个参数chars
if chars is None:
# 如果没有指定要去除的字符,默认去除空白字符(包括空格、制表符、换行符等)
pattern = r'^\s+|\s+$'
s = re.sub(pattern, '', s)
else:
# 如果指定了要去除的字符,构建正则表达式模式
pattern = f'[{re.escape(chars)}]+'
s = re.sub(pattern, '', s)
return s # 将处理后的字符串返回
# 测试函数
if __name__ == '__main__':
print(improved_re_strip(" Hello World! "))
print(improved_re_strip("***Hello Python!***", "*"))
print(improved_re_strip("***Hello Python!***", "en*"))