Регулярное выражение Findall останавливает поиск в первом случае

Я пытаюсь найти определенную строку с RegEx. Я хочу найти "что-то, начинающееся с 'f' и заканчивающееся первыми 2" (оно должно содержать только одну 2). В этом примере я хочу найти result = "fdba12" но код ниже дает мне 'fdba12312' (содержащий два 2). Как я могу прекратить поиск, когда сразу найду 2?

import re
string2 = "asfdba12312 sssdr1 12şljş1 kf"

t = re.findall(r'[f][\w]*[2]', string2 )
print(t)

1 ответ

Решение

Проблема в том, что ваше регулярное выражение содержит \w* шаблон, который также может соответствовать смежным 2 шаблон. Есть 2 способа достичь того, что вам нужно: 1) использовать ленивый квантификатор, предложенный rock321987, и 2) использовать обратный сокращенный класс char внутри класса отрицательных символов [^...] а также отрицать 2,

Таким образом, использование

f[^\W2]*2

Посмотреть демо-версию регулярного выражения

[^\W2]* шаблон соответствует нулю или большему количеству символов, кроме символов, не относящихся к слову (таким образом, он соответствует всем символам слова) и символам, отличным 2,

Примечание: жадное сопоставление здесь происходит быстрее, чем ленивое.

Другие вопросы по тегам