почему это не найдено с помощью указанного регулярного выражения в python? - PullRequest
1 голос
/ 11 июля 2019

Я использую это регулярное выражение в Python:

=\s*[^(]([Tt]rue|[Ff]alse)

Когда я выполняю его, оно соответствует показанным элементам. Однако я также ожидаю, что он будет соответствовать 7-му элементу, потому что в начале регулярного выражения написано '=', за которым следуют 0 или более символов пробела (то есть пробелы, табуляции и т. Д.), А в строке 7 - 0 символов пробела. Так почему же это не соответствует?

1 password = True (matched)
2 password = true (matched)
3 password = false (matched)
4 password = False (matched)
5 password "False"
6 password = 'True' (matched)
7 password =False (not matched but expected to be)
8 password =dict(required=False, default=None)

Ответы [ 3 ]

2 голосов
/ 11 июля 2019

Шаблон представляет собой знак равенства =, за которым следуют ноль или более пробелов \s*, , за которыми следует любой символ, отличный от '(' * [^(], за которым следует слово true или false ([Tt]rue|[Ff]alse)

В пункте 7 шаблон «любой символ, отличный от (») соответствует букве F. После «alse» - это не слово «истина» и не слово «ложь».

2 голосов
/ 11 июля 2019

[^(] означает, что вам требуется символ, который не ( между (возможно, пустой) последовательностью пробелов и словом True или False. В этой строке нет такого символа.

Вы можете сделать этот символ необязательным.

^[^(\n]*=\s*[^(]?([Tt]rue|[Ff]alse)

DEMO

0 голосов
/ 11 июля 2019
[^(] 

ааа после редактирования его правильно. это означает один любой не - [^'('] символ после = \ s * и THEN [Ff] и т. д., поэтому он будет пакетным, только если какой-то символ находится между = и [Ff] alse

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...