Регулярное выражение 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
,
Примечание: жадное сопоставление здесь происходит быстрее, чем ленивое.