Regex отрицает захват группы возвращает ответ

1

В python, как я могу помешать этому возвратить список пустых строк?

>>> re.findall(re.compile("(?!lala)"),"lala")
['', '', '', '']
  • 1
    Чего вы пытались достичь? Ваше регулярное выражение не имеет смысла. Не могли бы вы расширить свой вопрос и показать нам несколько примеров, где можно ожидать совпадения, которое не является пустым?
Теги:
regex-negation

2 ответа

4
Лучший ответ

Вы ищете пустую строку, за которой не следует текст lala, отрицательное утверждение lookahead.

Поскольку существует 4 таких позиции с пустой строкой (между буквами и в конце), существует 4 пустых совпадения.

Он возвращает именно то, что вы ищете, возможно, вы искали что-то другое вместо этого?

-1

в первую очередь: (?!lala) не очень хорошее регулярное выражение. (как вы узнали сами), во-вторых, findall будет искать практически все, что может найти, и поскольку вы действительно ищете что-либо, и вы ищете его в 4 символа, вы получаете 4 пустые строки.

Чтобы исправить это, вы должны немного помочь своим регулярным выражениям

попробуйте эту ссылку http://regexr.com?32dcm

который я скопировал ваше регулярное выражение и некоторые случайные строки, чтобы показать вам пример. также ниже:

^(?!lala).*$

будет соответствовать любой строке, которая не начинается с lala. так как вы не сделали свой точный желаемый ясный, это то, что я думаю, что вы пытаетесь сделать.

  • 1
    (?!lala) , очевидно, является законным регулярным выражением. Модуль re скомпилировал его, он возвращает результаты. Это означает: сопоставить то, что предшествует, с чем угодно, за чем не следует lala , где то , что предшествует, является пустой строкой. Обратите внимание , что есть 4 результатов, а не 5, как пустая строка в начале ввода следует lala , и , следовательно , не удовлетворяет ограничение.
  • 0
    @MartijnPieters, как обычно, martijn, вы правы. спасибо, что поправили меня.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню