从字典内元素的两个单引号间提取子串时正则报错如何解决
问题解决方法
报错原因
你遇到的报错来自两个问题:
- 正则语法错误:正则表达式
r"('(.+?)',"中左括号(未转义也未配对,正则引擎将其识别为捕获组开头,找不到对应的闭合右括号,直接触发语法错误。 - 入参类型错误:
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
相关产品推荐
相关产品推荐

