Вы можете найти подстроку между символами Я хочу найти этот символ svm? Я посмотрел на Получить строку между двумя строками и Найти строку между двумя подстроками. Итак, это моя строка ('svm', SVC()), и я хочу найти все между ' ', поэтому результат должен быть svm или dct_test

import re 
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']}
}

string = dict_SupportVectorMachine['classifier']
string2 = ('dct_test', ThisCouldbeLongerAndShorter())
subStr = re.findall(r"('(.+?)',",string)
print(subStr)
[OUT]
error: missing ), unterminated subpattern at position 0
0
Test 27 Ноя 2021 в 12:00
1
) - это специальный символ в регулярном выражении, похоже, у вас есть незакрытая скобка или скобка, которой здесь не должно быть.
 – 
aph
27 Ноя 2021 в 12:06
См. Мой отредактированный ответ, вам вообще не нужно обрабатывать строковые манипуляции
 – 
azro
27 Ноя 2021 в 14:41

2 ответа

Лучший ответ

У вас есть tuple из двух элементов: str и SVC, просто получите первый индекс

dict_SupportVectorMachine = {
    "classifier": ('svm', SVC()),
    "parameters": {}
}

classif = dict_SupportVectorMachine['classifier']
print(classif[0])  # svm

СТАРЫЙ ответ из-за другого вопроса

Скобка - это специальный символ для построения групп, так как настоящая скобка должна быть экранирована \(. Также используйте здесь search, а не findall

import re

string = "('svm', SVC())"
print(re.findall(r"\('(.+?)',", string))  # ['svm']
print(re.search(r"\('(.+?)',", string).group(1))  # svm

string2 = "('dct_test', ThisCouldbeLongerAndShorter()))"
print(re.findall(r"\('(.+?)',", string2))  # ['dct_test']
print(re.search(r"\('(.+?)',", string2).group(1))  # dct_test
1
azro 27 Ноя 2021 в 14:40
Спасибо за быстрый ответ. Я ценю это, однако я забыл включить свой dict_SupportVectorMachine . Так что я получаю именно ('svm', SVC()) без "". Можно ли его использовать, чтобы его найти? str (dict_SupportVectorMachine [...]) не работает.
 – 
Test
27 Ноя 2021 в 12:10
Какие ?? секунду назад ваш string содержал объект str, теперь это кортеж из: одной строки + одного объекта, выполните print(string[0]) и все
 – 
azro
27 Ноя 2021 в 12:22

Похоже, вы пропустили ) в четвертой строке:

import re 
string = "('svm', SVC())"
string2 = "('dct_test', ThisCouldbeLongerAndShorter()))"
subStr = re.findall(r"('(.+?))',",string)
print(subStr)
1
Cardstdani 27 Ноя 2021 в 12:08
1
Спасибо за быстрый ответ. Я ценю это, однако я забыл включить свой dict_SupportVectorMachine . Так что я получаю именно ('svm', SVC()) без "". Можно ли его использовать, чтобы его найти? str (dict_SupportVectorMachine [...]) не работает.
 – 
Test
27 Ноя 2021 в 12:10