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

Как проверить, имеет ли строковое значение точные символы в Python2? В частности, я ищу, чтобы определить, есть ли у него знаки доллара ( "$" ), запятые ( "," ) и цифры.

Ответ 1

Предполагая, что ваша строка s:

'$' in s        # found
'$' not in s    # not found

# original answer given, but less Pythonic than the above...
s.find('$')==-1 # not found
s.find('$')!=-1 # found

И так далее для других символов.

... или

pattern = re.compile(r'\d\$,')
if pattern.findall(s):
    print('Found')
else
    print('Not found')

... или

chars = set('0123456789$,')
if any((c in chars) for c in s):
    print('Found')
else:
    print('Not Found')

[Изменить: добавлены ответы '$' in s]

Ответ 2

пользователь Jochen Ritzel сказал это в комментарии к ответу на этот вопрос от пользователя dappawit. Он должен работать:

('1' in var) and ('2' in var) and ('3' in var) ...

'1', '2' и т.д. следует заменить символами, которые вы ищете.

См. эту страницу в документации Python 2.7 для получения некоторой информации о строках, в том числе об использовании оператора in для тестов подстроки.

Обновление: Выполняет ту же работу, что и мое предыдущее предложение, с меньшим количеством повторений:

# When looking for single characters, this checks for any of the characters...
# ...since strings are collections of characters
any(i in '<string>' for i in '123')
# any(i in 'a' for i in '123') -> False
# any(i in 'b3' for i in '123') -> True

# And when looking for subsrings
any(i in '<string>' for i in ('11','22','33'))
# any(i in 'hello' for i in ('18','36','613')) -> False
# any(i in '613 mitzvahs' for i in ('18','36','613')) ->True

Ответ 3

Быстрое сравнение таймингов в ответ на сообщение Аббафей:

import timeit

def func1():
    phrase = 'Lucky Dog'
    return any(i in 'LD' for i in phrase)

def func2():
    phrase = 'Lucky Dog'
    if ('L' in phrase) or ('D' in phrase):
        return True
    else:
        return False

if __name__ == '__main__': 
    func1_time = timeit.timeit(func1, number=100000)
    func2_time = timeit.timeit(func2, number=100000)
    print('Func1 Time: {0}\nFunc2 Time: {1}'.format(func1_time, func2_time))

Вывод:

Func1 Time: 0.0737484362111
Func2 Time: 0.0125144964371

Таким образом, код более компактен с любым, но быстрее с условным.

Ответ 4

Это будет проверяться, если строки состоят из некоторой комбинации или цифр, знака доллара и запятой. Это то, что вы ищете?

import re

s1 = 'Testing string'
s2 = '1234,12345$'

regex = re.compile('[0-9,$]+$')

if ( regex.match(s1) ):
   print "s1 matched"
else:
   print "s1 didn't match"

if ( regex.match(s2) ):
   print "s2 matched"
else:
   print "s2 didn't match"

Ответ 5

sWord = "pizza and chips"
for i in range(0, len(sWord)):
    print(sWord[i])
    if sWord[i]=="d":
        print("Found a d")