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

如何从等号分隔的字符串中灵活提取字符与数值对?

灵活提取等号两侧数值与字符对的解决方案

我来帮你搞定这个问题——要从这类格式多样的等号分割字符串里提取数值和字符对,lstrip/rstrip这类方法确实不够灵活,因为它们只能处理固定位置的字符,没法智能区分数值和文本内容。用正则表达式是更靠谱的选择,完全不需要预定义任何字符类型,就能适配各种场景。

核心思路

  1. 先把每个字符串按=分割成左右两部分;
  2. 对每一部分,用正则匹配开头的数值(支持整数、带逗号/小数点的小数),剩下的部分去掉多余空格就是我们要的字符标识;
  3. 最后把左右两侧的结果配对,得到你需要的字符对和数值对。

代码实现(Python)

import re

def extract_pairs(input_strings):
    char_pairs = []
    num_pairs = []
    # 正则匹配:开头的数值(支持整数、带逗号/点的小数) + 后续的文本内容
    num_text_pattern = re.compile(r'^\s*(\d+(?:[,.]\d+)?)\s*(.*)$')
    
    for s in input_strings:
        # 按等号分割左右部分,兼容等号前后有无空格的情况
        left_part, right_part = s.split('=')
        
        # 处理左侧内容
        left_match = num_text_pattern.match(left_part)
        left_num = left_match.group(1).replace(',', '.')  # 把逗号转成标准小数点
        left_char = left_match.group(2).strip()
        
        # 处理右侧内容
        right_match = num_text_pattern.match(right_part)
        right_num = right_match.group(1).replace(',', '.')
        right_char = right_match.group(2).strip()
        
        # 收集结果
        char_pairs.append(f"{left_char}-{right_char}")
        num_pairs.append(f"{left_num}-{right_num}")
    
    return char_pairs, num_pairs

# 测试你的输入字符串
test_strings = [
    '10000 ABC = 1 DEF',
    '1 AM = 0,30$',
    '3500 ABC = 1 GTY',
    '1000 HUYT=1ABC',
    '1 MONET Data = 1 ABC'
]

result_chars, result_nums = extract_pairs(test_strings)
print("字符对:", result_chars)
print("数值对:", result_nums)

运行结果

字符对: ['ABC-DEF', 'AM-$', 'ABC-GTY', 'HUYT-ABC', 'MONET Data-ABC']
数值对: ['10000-1', '1-0.30', '3500-1', '1000-1', '1-1']

为什么strip方法不行?

lstrip和rstrip只能移除字符串开头/结尾的固定字符集合,没法智能识别数值和文本的边界:比如1 MONET Data,用lstrip去掉数字后还要手动处理空格;遇到0,30$这种带逗号的小数,更是没法正确提取出完整数值。而正则表达式可以精准匹配任意格式的开头数值,剩下的部分直接就是我们需要的标识文本,完全不需要预定义字符类型,灵活性拉满。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:29:20