You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何使用Regex打印数组中以指定数字开头的元素

问题背景

现有存储如下格式数据的文件:

Dave Martin
615-555-7164
173 Main St., Springfield RI 55924
davemartin@bogusemail.com

Charles Harris
800-555-5669
969 High St., Atlantis VA 34075
charlesharris@bogusemail.com

Eric Williams
560-555-5153
806 1st St., Faketown AK 86847
laurawilliams@bogusemail.com

需求为读取文件每一行,筛选出列表中以指定数字开头的元素存入新列表。

初始代码与报错

最初编写的代码如下:

from os import sep
import re

number = int(input("Number: "))
last_digit = number % 10
final = str(last_digit)

results = []

with open("data.txt") as f:
    lines = f.readlines()
desired = lines[2::5]

results = re.findall('^[4][0-9]{2}$', desired)

print(results)

运行时报错:

TypeError: expected string or bytes-like object

同时不知道如何把提取出的数字变量final代入正则规则,暂时硬编码为4。

问题原因
  • desired是lines[2::5]取出的地址行组成的列表,而re.findall的匹配对象要求是字符串/字节类型,直接传入列表就会触发类型错误。
  • 正则规则本身是字符串,要代入变量直接拼接即可,特殊字符用re.escape处理避免影响正则逻辑。
最终解决代码
from os import sep
import re

number = int(input("Number: "))
last_digit = number % 10
final = str(last_digit)

results = []

with open("data.txt") as f:
    lines = f.readlines()
desired = lines[2::5]

r = re.compile("[" + re.escape(final) + "][0-9]{2}.*")
newlist = list(filter(r.match, desired))

print("********************")
print(*newlist)

核心优化点:

  • 先把正则规则编译成正则对象,用r.match方法逐行匹配
  • 用filter遍历desired列表的所有元素,筛选出匹配的内容转为新列表

内容的提问来源于stack exchange,提问作者Nikola Knežević

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:06:04