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

如何用正则表达式提取比较运算符前后的标签与数值?

正确提取标签与数值的实现方案

嘿,我来帮你搞定这个提取问题!你的需求是从包含比较条件的字符串里,分别提取运算符前的标签列表和运算符后的数值列表,之前的正则表达式没能正确覆盖所有情况,下面给你两种可靠的实现方式:

方法一:正则分组匹配(推荐)

这种方式通过正则的分组功能,一次性匹配出每个条件里的标签、运算符和数值,逻辑清晰且能处理运算符前后空格不一致的情况,还兼容中文顿号的分隔:

import re

# 你的输入字符串
input_str = "aa1 !=5、bb1 >=1、cc1 ==1、dd2 <= 2、e3 <2"

# 正则模式:分组匹配标签、运算符、数值
# - 第一个分组 ([a-zA-Z0-9_]+):匹配标签(字母、数字、下划线组成)
# - \s*:匹配运算符前后的任意空格(包括0个)
# - 第二个分组 ([!=<>]=?):匹配所有比较运算符(!=、>=、==、<=、<、>)
# - 第三个分组 (\d+):匹配数值(数字)
pattern = r'([a-zA-Z0-9_]+)\s*([!=<>]=?)\s*(\d+)'
matches = re.findall(pattern, input_str)

# 分别提取标签和数值
tags = [item[0] for item in matches]
values = [item[2] for item in matches]

print("标签列表:", tags)   # 输出: ['aa1', 'bb1', 'cc1', 'dd2', 'e3']
print("数值列表:", values) # 输出: ['5', '1', '1', '2', '2']

方法二:拆分条件逐个处理

如果觉得正则有点抽象,也可以先把整个字符串按中文顿号分割成单个条件,再对每个条件拆分出标签和数值:

input_str = "aa1 !=5、bb1 >=1、cc1 ==1、dd2 <= 2、e3 <2"
conditions = input_str.split('、')

tags = []
values = []

# 定义所有可能的比较运算符,按长度从长到短排序(避免短运算符先匹配,比如先匹配=再匹配==)
operators = ['!=', '>=', '<=', '==', '>', '<']

for cond in conditions:
    for op in operators:
        if op in cond:
            tag, val = cond.split(op)
            tags.append(tag.strip())
            values.append(val.strip())
            break

print("标签列表:", tags)   # 输出: ['aa1', 'bb1', 'cc1', 'dd2', 'e3']
print("数值列表:", values) # 输出: ['5', '1', '1', '2', '2']

为什么之前的正则无效?

你之前写的正则[a-zA-Z0-9_.]* ? (?(!=|==|<=|>=|>|<)\=)逻辑过于复杂,且只针对包含=的运算符,漏掉了单独的<或>,同时没有处理中文顿号分隔和空格的问题,所以无法正确提取所有内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:11:14