Объединение f-строки с необработанной строкой, которая будет использоваться внутри регулярного выражения, дает SyntaxErrPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Объединение f-строки с необработанной строкой, которая будет использоваться внутри регулярного выражения, дает SyntaxErr

Сообщение Anonymous »

Здесь у меня есть строка:

Код: Выделить всё

s0 = 'Ready1   Origin1                 Destination1             Type1       Rate1      Phone1 #     Pro1 #'
и следующая переменная вычисляется следующим образом:

Код: Выделить всё

is_head = len([i.group() for i in re.finditer(r"(\s+){2,}", s0)]) >= 3
что дает мне True, что для меня является правильным и ожидаемым результатом. Теперь у меня есть еще одна переменная cont_, которая может содержать любое значение от 2 до 6. Я хочу изменить регулярное выражение с r"(\s+){2,}" на r"(\s+){6,}" на основе значения cont_. Я хочу получить переменную is_head без объявления отдельного регулярного выражения для каждого случая. Для этого мне нужно использовать f-строку вместе с необработанной строкой, которая в настоящее время используется для проверки регулярных выражений. Я пробовал это:

Код: Выделить всё

>>> len([i.group() for i in re.finditer(fr"(\s+){{cont_},}", s0)]) >= 3
File "", line 1
SyntaxError: f-string: single '}' is not allowed
>>> len([i.group() for i in re.finditer(rf"(\s+){{cont_},}", s0)]) >= 3
File "", line 1
SyntaxError: f-string: single '}' is not allowed
Как показано, оба выдают SyntaxError. Я также пробовал с .format() следующее:

Код: Выделить всё

>>> len([i.group() for i in re.finditer(r"(\s+){{con},}".format(cont_), s0)]) >= 3
Traceback (most recent call last):
File "", line 1, in 
ValueError: Single '}' encountered in format string
>>> len([i.group() for i in re.finditer(r"(\s+){{0},}".format(cont_), s0)]) >= 3
Traceback (most recent call last):
File "", line 1, in 
ValueError: Single '}' encountered in format string
в этом случае я получаю ValueError. Теперь я тоже попробовал это:

Код: Выделить всё

>>> len([i.group() for i in re.finditer(fr"(\s+){cont_,}", s0)]) >= 3
False
>>> len([i.group() for i in re.finditer(rf"(\s+){cont_,}", s0)]) >= 3
False
Они не вызывают ошибок, но в каждом случае дают неправильный результат. Если бы я запускал случай cont_ = 2, для is_head было бы установлено значение True. При дальнейшем рассмотрении я вижу, что rf"(\s+){cont_,}", а также fr"(\s+){cont_,}" - оба эквивалентны '(\\ s+)(2,)', которое не должно быть правильным регулярным выражением. Как преодолеть это без явного создания отдельных регулярных выражений для каждого возможного значения переменной cont_ и последующего использования этого регулярного выражения.

ПРИМЕЧАНИЕ. Обратите внимание: я знаю, что подобный вопрос здесь уже задавался. Но решения, которые там есть, не помогут моему делу.

Подробнее здесь: https://stackoverflow.com/questions/622 ... axerror-va
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»