2016-05-30 3 views
2

Я пытаюсь найти определенную строку с 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

Или 'f [^ \ W2] * 2'. –

+1

[Python non-greedy regexes] (http://stackoverflow.com/q/766372) –

ответ

1

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

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

f[^\W2]*2 

Смотрите regex demo

[^\W2]* соответствует шаблону, кроме символов без слов (так, он соответствует всем символам слова) и те, кроме 2 ноль или более символов.

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

 Смежные вопросы

  • Нет связанных вопросов^_^