How do you check if a string contains a particular character in python?

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

Chủ Đề