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

从字典内元素的两个单引号间提取子串时正则报错如何解决

问题解决方法

报错原因

你遇到的报错来自两个问题:

  1. 正则语法错误:正则表达式r"('(.+?)',"中左括号(未转义也未配对,正则引擎将其识别为捕获组开头,找不到对应的闭合右括号,直接触发语法错误。
  2. 入参类型错误:dict_SupportVectorMachine['classifier']取出的是元组类型,re.findall要求传入字符串作为匹配对象,直接传元组也会报错。

最优实现方案(无需正则)

你需要的svm/dct_test本身就是元组的第一个元素,直接取索引[0]即可,代码更简洁:

from sklearn.svm import SVC

# 自定义类示例,替换为你实际的类定义
class ThisCouldbeLongerAndShorter:
    pass

dict_SupportVectorMachine = {
    "classifier": ('svm', SVC()),
    "parameters": {'svm__C':[0.001,0.01,0.1,10, 100],
                   'svm__gamma':[0.1,0.01],
                   'svm__kernel':['linear', 'sigmoid']}
}

tuple1 = dict_SupportVectorMachine['classifier']
tuple2 = ('dct_test', ThisCouldbeLongerAndShorter())

res1 = tuple1[0]
res2 = tuple2[0]
print(res1)  # 输出:svm
print(res2)  # 输出:dct_test

若输入为字符串需正则匹配的修正方案

如果你的输入确实是"('svm', SVC())"这类字符串格式,修正正则语法即可:

import re
from sklearn.svm import SVC

class ThisCouldbeLongerAndShorter:
    pass

str1 = "('svm', SVC())"
str2 = "('dct_test', ThisCouldbeLongerAndShorter())"

# 正则转义左括号,配对语法,只捕获单引号中间内容
subStr1 = re.findall(r"\('(.+?)',", str1)
subStr2 = re.findall(r"\('(.+?)',", str2)

print(subStr1[0])  # 输出:svm
print(subStr2[0])  # 输出:dct_test

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:15:05