RegEx находит, принадлежат ли ВСЕ символы к набору - PullRequest
0 голосов
/ 04 мая 2020

Я хочу знать, принадлежат ли все символы в строке определенному набору. Это моя попытка, но она явно неверна, так как она будет оценена как True, даже если к набору относится только один символ a-zA-Z or - or '

bool(re.search("[a-zA-Z]|-|'",string))

Мне нужно что-то, что возвращает False, когда хотя бы один символ строки не принадлежит к набору. Если бы я мог получить дополнение (по всем возможным символам) набора "[a-zA-Z]|-|'", тогда моя проблема была бы решена. Пожалуйста, дайте мне знать, если это возможно в Python3 .6

Ответы [ 3 ]

1 голос
/ 04 мая 2020

Вы можете написать [a-zA-Z]|-|' как [a-zA-Z'-] (важно, чтобы - был первым или последним в списке, чтобы он не интерпретировался как диапазон). Затем вы можете использовать обычный класс отрицательных символов: [^a-zA-Z'-], чтобы найти персонажа, которого нет в наборе.

0 голосов
/ 04 мая 2020

Вместо регулярного выражения используйте фактические set строк:

>>> import string
>>> allowed = set(string.ascii_letters + string.digits + "'-")
>>> allowed.issuperset("HelloWorld")
True
>>> allowed.issuperset("'Hello-World'")
True
>>> allowed.issuperset("HelloWorld!")
False
0 голосов
/ 04 мая 2020

Вы просто должны сопоставить всю строку:

bool(re.search("^[a-zA-Z]+$",string))

^, $ являются начальными / конечными якорями, которые соответствуют (абстрактное понятие) началу / концу строки .

Пропущены здесь чередования оригинальных регулярных выражений.

Демо (repl.it) доступно

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