Как проверить, что строка не содержит двух разных подстрок только с одним условием?

#python #if-statement

Вопрос:

У меня есть строка под названием имя. Меня интересуют случаи, когда имя не содержит ни 'bias' того, ни 'bn' другого . Я могу реализовать его, используя два условия, двумя способами следующим образом:

 if 'bias' not in name and 'bn' not in name:
   pass
 

Или используя закон Деморгана следующим образом:

 if not ('bias' in name or 'bn' in name):
   pass
 

Обратите внимание, что имя содержит больше символов, чем 'bias' или 'bn' поэтому мы не можем иметь name not in {'bias', bn'} в качестве случая с одним условием.

Вопрос: Как мы можем проверить, не содержит ли строка имени 'bias' ни 'bn' одного in или одного условия?

Ответ №1:

Вы можете создать список подстрок для поиска, в основном пройтись по списку и in проверить, является ли он частью входной строки или нет.

 name = 'some name'
to_search = ['bias', 'bn']
found_a_string = False
for item in to_search:
    if item in name:
        print(item, 'is a part of ', name)
        found_a_string = True

if found_a_string:
    print("Present")
else:
    print("NA")
 

или

с помощью any

 name = 'some name'
to_search = ['bias', 'bn']

if any(x in name for x in to_search):
    print("Present")
else:
    print("No matches found")
 

Комментарии:

1. Любое — это то, что вы хотите. @Сепиде

Ответ №2:

Используйте re с findall , который возвращает список с совпадениями:

 import re
if len(re.findall('bias|bn', name)) == 0:
    pass
 

Ответ №3:

Используя re.search наряду с пониманием списка, мы можем попробовать:

 inp = ["a bias", "a bn", "a bn bias", "other"]
output = ["MATCH" if re.search(r'^(?!.*bias)(?!.*bn)w 

Вот объяснение шаблона регулярного выражения:

 ^               from the start of the input string
    (?!.*bias)  assert that the substring "bias" appears nowhere
    (?!.*bn)    assert that the substring "bn" appears nowhere
    w          then match any word
$               end of the input
 

Ответ №4:

Попробуйте вот это :

 name = 'An string'
if False in [i not in name for i in ['bias', 'bn']]:
    print('Yes')
 

Вы также можете создать функцию, чтобы упростить ее:

 def IsTrueName(name):
    return False in [i not in name for i in ['bias', 'bn']]

name = 'An string'
if IsTrueName(name):
    print('Yes')
 

, x) else "NO MATCH" for x in inp]
print(output) # ['NO MATCH', 'NO MATCH', 'NO MATCH', 'MATCH']
Вот объяснение шаблона регулярного выражения:


Ответ №4:

Попробуйте вот это :


Вы также можете создать функцию, чтобы упростить ее: