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

求助:使用正则表达式提取文本中AELIST块的数字数据

提取AELIST块中的数字为嵌套列表

解决步骤

  1. 锁定AELIST块范围:用正则精准匹配从AELIST行开始,到下一个独立全大写行(非+开头/结尾的分隔行)结束的所有内容,包括带+的延续行。
  2. 提取块内数字:对每个匹配到的AELIST块,提取所有数字字符,忽略+和其他无关符号。
  3. 整理为嵌套列表:将每个块的数字列表收集起来,形成最终的嵌套结构。

代码实现(Python)

import re

# 替换成你的输入文本
input_text = """
AELIST 123 456
+ 789 012
SET1 345 678
AELIST 987 654
+ 321 098
+ 765 432
OTHER 111 222
"""

# 匹配AELIST块的正则:从AELIST行开始,到下一个全大写分隔行/文本结束
block_regex = re.compile(r'^AELIST.*?(?=^[A-Z]+$|\Z)', re.MULTILINE | re.DOTALL)
# 提取数字的正则
num_regex = re.compile(r'\d+')

# 生成嵌套列表
result = []
for block in block_regex.findall(input_text):
    # 提取当前块的所有数字,转成整数(要字符串的话去掉int转换)
    num_list = [int(num) for num in num_regex.findall(block)]
    result.append(num_list)

print(result)
# 输出:[[123, 456, 789, 12], [987, 654, 321, 98, 765, 432]]

正则说明

  • block_regex:
    • ^AELIST:匹配行首的AELIST开头
    • .*?:非贪婪匹配,避免跨块抓取
    • (?=^[A-Z]+$|\Z):正向预查,匹配到下一个全大写行(块分隔符)或文本结束时停止
    • re.MULTILINE让^匹配每一行的开头,re.DOTALL让.包含换行符,确保延续行被纳入块内
  • num_regex:\d+直接匹配所有连续数字,不管位置,确保不会漏掉延续行里的数字

为什么之前的代码失效

你之前的匹配逻辑没有限定只在AELIST块内操作,而是抓取所有大写/+开头的行,自然会混入SET1、OTHER等无关块的内容。通过先锁定AELIST块的范围,再在块内提取数字,就能精准得到目标数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:18:21