В python, как я могу помешать этому возвратить список пустых строк?
>>> re.findall(re.compile("(?!lala)"),"lala")
['', '', '', '']
Вы ищете пустую строку, за которой не следует текст lala
, отрицательное утверждение lookahead.
Поскольку существует 4 таких позиции с пустой строкой (между буквами и в конце), существует 4 пустых совпадения.
Он возвращает именно то, что вы ищете, возможно, вы искали что-то другое вместо этого?
в первую очередь: (?!lala)
не очень хорошее регулярное выражение. (как вы узнали сами), во-вторых, findall будет искать практически все, что может найти, и поскольку вы действительно ищете что-либо, и вы ищете его в 4 символа, вы получаете 4 пустые строки.
Чтобы исправить это, вы должны немного помочь своим регулярным выражениям
попробуйте эту ссылку http://regexr.com?32dcm
который я скопировал ваше регулярное выражение и некоторые случайные строки, чтобы показать вам пример. также ниже:
^(?!lala).*$
будет соответствовать любой строке, которая не начинается с lala. так как вы не сделали свой точный желаемый ясный, это то, что я думаю, что вы пытаетесь сделать.
(?!lala)
, очевидно, является законным регулярным выражением. Модуль re скомпилировал его, он возвращает результаты. Это означает: сопоставить то, что предшествует, с чем угодно, за чем не следует lala
, где то , что предшествует, является пустой строкой. Обратите внимание , что есть 4 результатов, а не 5, как пустая строка в начале ввода следует lala
, и , следовательно , не удовлетворяет ограничение.