Как проверить, имеет ли строковое значение точные символы в 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")