题目:
题目来源:
Python编程快速上手——让繁琐工作自动化;
第7章:用正则表达式匹配更多模式;7.17 习题;20;程序要求:
写一个正则表达式匹配每三位就有一个逗号的数字。它必须匹配以下数字:
‘42’
‘1,234’
‘6,268,745’
但不会匹配以下的数字:
’12,34,567’(逗号之间只有两个数字)
‘12,3,456’(逗号之间只有一个数字)
‘1234’(缺少逗号)
解答:
import re # 导入正则表达式模块
def re_number(number):
"""
此函数用于判断输入的数字是否符合每三位就有一个逗号的格式
参数:
number (str):要匹配的数字字符串
返回:
bool:如果匹配成功返回 True,否则返回 False
"""
pattern = r'^\d{1,3}(,\d{3})*$' # 以 1 到 3 个数字开头,后面跟 0 个或多个 (逗号 + 3 个数字) 的组合
# 使用 re.match() 方法判断是否匹配
if re.match(pattern, number):
return True
else:
return False
# 测试用例
if __name__ == '__main__':
numbers = ['42', '1,234', '6,268,745', '12,34,567', '12,3,456', '1234']
matched_numbers = [] # 该字典用来存储匹配的数字
unmatched_numbers = [] # 该字典用来存储不匹配的数字
# 遍历需要监测的数字列表
for number in numbers:
# 判断是否符合要求的格式
if re_number(number):
matched_numbers.append(number)
else:
unmatched_numbers.append(number)
print("匹配成功的数字:")
for num in matched_numbers:
print(f"{num}")
print("匹配失败的数字:")
for num in unmatched_numbers:
print(f"{num}")