How can I check if a string has several specific characters in it using Python 2?
For example, given the following string:
The criminals stole $1,000,000 in jewels.
How do I detect if it has dollar signs ["$"], commas [","], and numbers?
Jesuisme
1,6351 gold badge31 silver badges39 bronze badges
asked Mar 4, 2011 at 1:47
3
Assuming your string is 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
And so on for other characters.
... or
pattern = re.compile[r'\d\$,']
if pattern.findall[s]:
print['Found']
else
print['Not found']
... or
chars = set['0123456789$,']
if any[[c in chars] for c in s]:
print['Found']
else:
print['Not Found']
[Edit: added the '$' in s
answers]
answered Mar 4, 2011 at 2:07
dappawitdappawit
11.7k2 gold badges31 silver badges26 bronze badges
7
user Jochen Ritzel said this in a comment to an answer to this question from user dappawit. It should work:
['1' in var] and ['2' in var] and ['3' in var] ...
'1', '2', etc. should be replaced with the characters you are looking for.
See this page in the Python 2.7 documentation for some information on strings, including about using the in
operator for substring tests.
Update: This does the same job as my above suggestion with less repetition:
# When looking for single characters, this checks for any of the characters...
# ...since strings are collections of characters
any[i in '' 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 '' 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
answered Mar 4, 2011 at 2:39
AbbafeiAbbafei
3,0183 gold badges26 silver badges24 bronze badges
2
Quick comparison of timings in response to the post by Abbafei:
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]]
Output:
Func1 Time: 0.0737484362111
Func2 Time: 0.0125144964371
So the code is more compact with any, but faster with the conditional.
EDIT : TL;DR -- For long strings, if-then is still much faster than any!
I decided to compare the timing for a long random string based on some of the valid points raised in the comments:
# Tested in Python 2.7.14
import timeit
from string import ascii_letters
from random import choice
def create_random_string[length=1000]:
random_list = [choice[ascii_letters] for x in range[length]]
return ''.join[random_list]
def function_using_any[phrase]:
return any[i in 'LD' for i in phrase]
def function_using_if_then[phrase]:
if ['L' in phrase] or ['D' in phrase]:
return True
else:
return False
if __name__ == '__main__':
random_string = create_random_string[length=2000]
func1_time = timeit.timeit[stmt="function_using_any[random_string]",
setup="from __main__ import function_using_any, random_string",
number=200000]
func2_time = timeit.timeit[stmt="function_using_if_then[random_string]",
setup="from __main__ import function_using_if_then, random_string",
number=200000]
print['Time for function using any: {0}\nTime for function using if-then: {1}'.format[func1_time, func2_time]]
Output:
Time for function using any: 0.1342546
Time for function using if-then: 0.0201827
If-then is almost an order of magnitude faster than any!
answered Jul 14, 2015 at 17:11
JesuismeJesuisme
1,6351 gold badge31 silver badges39 bronze badges
3
This will test if strings are made up of some combination or digits, the dollar sign, and a commas. Is that what you're looking for?
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"
answered Mar 4, 2011 at 2:01
ajwoodajwood
17.2k15 gold badges58 silver badges100 bronze badges
3
Check if chars are in String:
parse_string = lambda chars, string: [char in string for char in chars]
example:
parse_string['$,x', 'The criminals stole $1,000,000 in ....']
or
parse_string[['$', ',', 'x'], '..minals stole $1,000,000 i..']
output:
[True, True, False]
answered Mar 16, 2021 at 18:19
FelixFelix
112 bronze badges
My simple, simple, simple approach! =D
Code
string_to_test = "The criminals stole $1,000,000 in jewels."
chars_to_check = ["$", ",", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
for char in chars_to_check:
if char in string_to_test:
print["Char \"" + char + "\" detected!"]
Output
Char "$" detected!
Char "," detected!
Char "0" detected!
Char "1" detected!
bad_coder
9,28119 gold badges37 silver badges61 bronze badges
answered Dec 29, 2020 at 15:27
Eduardo LucioEduardo Lucio
1,2551 gold badge19 silver badges33 bronze badges
s=input["Enter any character:"]
if s.isalnum[]:
print["Alpha Numeric Character"]
if s.isalpha[]:
print["Alphabet character"]
if s.islower[]:
print["Lower case alphabet character"]
else:
print["Upper case alphabet character"]
else:
print["it is a digit"]
elif s.isspace[]:
print["It is space character"]
else:
print["Non Space Special Character"]
answered Aug 21, 2018 at 15:36
NagarajNagaraj
5682 gold badges5 silver badges8 bronze badges
2