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

如何用正则表达式从文件中稳定提取多组标签与对应数值?

嘿,我完全懂你现在的头疼之处——自己写的提取函数不稳定,只能抓1-2个值,标签和数值还经常对不上,想用正则又没太多经验对吧?别担心,咱们一步步来解决这个问题。

先理清楚你的需求:从非结构化的文本里,精准匹配特定标签(比如Bit、From、To这类)对应的数值,数值格式还可能包含整数、小数、带空格的分数(比如示例里的4 3/4)。

先分析你的示例场景

输入文本:Run Bora Hot Record Casing Record No. From To Sue fr To One 4 3/4 4569 TD 5.5 15 .5 Surface 4569
预期提取:Bit: 4 3/4, From: 4569, TD:5.5, Surface:4569...

解决方案:用正则实现稳定的标签-数值匹配

核心思路是先定位目标标签,再精准捕获它后面的数值。这里给你一个可直接复用的Python函数示例,你可以根据实际需求调整标签和数值规则:

import re

def extract_tag_values(text):
    # 定义要提取的标签及对应的正则匹配规则
    # 你可以根据实际文本的标签/数值格式,随时添加或修改规则
    tag_rules = {
        'Bit': r'To One\s+(\d+\s+\d+/\d+)',  # 匹配"To One"后的带空格分数(如4 3/4)
        'From': r'From\s+(\d+)',             # 匹配"From"后的整数
        'TD': r'TD\s+(\d+\.\d+)',            # 匹配"TD"后的小数
        'Surface': r'Surface\s+(\d+)',       # 匹配"Surface"后的整数
        # 示例:如果需要匹配To的数值,可添加类似规则:
        # 'To': r'To\s+(\d+\.?\d*)'
    }
    
    extracted_result = {}
    for tag, pattern in tag_rules.items():
        # 查找第一个匹配的内容,如需多匹配可改用re.findall
        match = re.search(pattern, text)
        if match:
            # 去除数值前后可能的多余空格
            extracted_result[tag] = match.group(1).strip()
    
    return extracted_result

# 测试你的示例文本
sample_text = "Run Bora Hot Record Casing Record No. From To Sue fr To One 4 3/4 4569 TD 5.5 15 .5 Surface 4569"
result = extract_tag_values(sample_text)

# 打印提取结果
for tag, value in result.items():
    print(f"{tag}: {value}")

关键调整说明

  1. 数值格式适配:如果你的数值有更多变体(比如不带空格的分数、负数、多位小数),可以修改正则的捕获组。比如把分数匹配规则改成(\d+\s*\d+/\d+),就能兼容带/不带空格的分数格式。
  2. 标签大小写兼容:如果文本里标签有大小写变体(比如"FROM"或"from"),可以在re.search里加上忽略大小写的标志:re.search(pattern, text, re.IGNORECASE)。
  3. 多匹配场景:如果同一个标签出现多次需要提取所有数值,把re.search换成re.findall,并将结果存为列表即可。

这样调整后,你的提取函数就能稳定捕获多个标签对应的数值,不会再出现匹配不稳定的问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:55:51