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

带索引过滤列表:正则匹配导致索引错位的问题排查与解决

解决新冠疫情州级数据提取的索引匹配问题

我来帮你排查并解决这个索引不准确的问题。首先,咱们先分析下你之前代码的问题所在:

你的正则处理里做了两次替换操作(replace('.\n\n', '\n').replace('.', ':')),这会打乱原始文本的结构,比如把汇总行的句号改成冒号,干扰后续的正则匹配;另外,你用的正则^(.*?\(.*?\))\n采用了非贪婪匹配,加上换行符的处理逻辑问题,导致提取到的条目顺序出现偏移,自然索引就不对了。

下面给你两种简单可靠的解决方案,都能保证索引完全符合你的需求:

方案1:字符串分割法(直观易懂)

直接通过拆分换行符来过滤出需要的州数据,逻辑清晰不容易出错:

import re

ListA = ['Sehingga 30 Ogos 2021: Jumlah kes COVID-19 yang dilaporkan adalah 19,268 kes (1,725,357 kes).\nPecahan setiap negeri (Kumulatif):\nSelangor - 3,567 (599,624)\nWPKL - 672 (172,236)\nSabah - 2,310 (145,249)\nJohor - 2,265 (136,488)\nSarawak - 2,028 (114,273)\nKedah - 2,084 (97,100)\nNegeri Sembilan - 269 (91,261)\nPulau Pinang - 1,780 (84,759)\nKelantan - 1,308 (76,047)\nPerak - 1,144 (66,889)\nMelaka - 395 (48,141)\nPahang - 788 (43,335)\nTerengganu - 544 (32,884)\nWP Labuan - 2 (9,808)\nWP Putrajaya - 41 (5,373)\nPerlis - 71 (1,890)\nREAD MORE...']

# 取出原始文本并移除末尾的"READ MORE..."
raw_content = ListA[0].rstrip('\nREAD MORE...')

# 按换行符拆分所有行
all_lines = raw_content.split('\n')

# 前两行是汇总标题,从第三行开始就是各州的数据
state_records = all_lines[2:]

# 测试索引是否正确
print(state_records[0])  # 输出: Selangor - 3,567 (599,624)
print(state_records[2])  # 输出: Sabah - 2,310 (145,249)

方案2:精准正则匹配法

如果偏好正则,可以用更精准的匹配规则,直接定位所有州级数据条目:

import re

ListA = ['Sehingga 30 Ogos 2021: Jumlah kes COVID-19 yang dilaporkan adalah 19,268 kes (1,725,357 kes).\nPecahan setiap negeri (Kumulatif):\nSelangor - 3,567 (599,624)\nWPKL - 672 (172,236)\nSabah - 2,310 (145,249)\nJohor - 2,265 (136,488)\nSarawak - 2,028 (114,273)\nKedah - 2,084 (97,100)\nNegeri Sembilan - 269 (91,261)\nPulau Pinang - 1,780 (84,759)\nKelantan - 1,308 (76,047)\nPerak - 1,144 (66,889)\nMelaka - 395 (48,141)\nPahang - 788 (43,335)\nTerengganu - 544 (32,884)\nWP Labuan - 2 (9,808)\nWP Putrajaya - 41 (5,373)\nPerlis - 71 (1,890)\nREAD MORE...']

raw_content = ListA[0]
# 正则规则:匹配以州名(含空格和缩写)开头,跟着数字、括号的完整行
state_records = re.findall(
    r'^[A-Za-z\s]+ - \d+(?:,\d+)* \(\d+(?:,\d+)*\)$',
    raw_content,
    flags=re.MULTILINE
)

# 验证索引
print(state_records[2])  # 输出: Sabah - 2,310 (145,249)

这两种方案都能保证提取到的列表索引完全符合你的预期,再也不会出现索引偏移的问题啦。

内容的提问来源于stack exchange,提问作者johnny2000

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 08:57:32