python 如何检查字符串中的特定字符?

htzpubme  于 2023-05-05  发布在  Python
关注(0)|答案(9)|浏览(144)

如何使用Python 2检查一个字符串中是否有几个特定的字符?
例如,给定以下字符串:
罪犯偷走了价值100万美元的珠宝。
如何检测它是否有美元符号(“$”)、逗号(“,”)和数字?

x4shl7ld

x4shl7ld1#

假设你的字符串是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')

[Edit:添加了'$' in s答案]

9jyewag0

9jyewag02#

用户JochenRitzel在对用户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
eaf3rand

eaf3rand3#

快速比较响应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))

输出:

Func1 Time: 0.0737484362111
Func2 Time: 0.0125144964371

因此,使用any的代码更紧凑,但使用条件的代码更快。

**编辑:**TL;DR-对于长字符串,if-then * 仍然 * 比任何一个都快!

我决定根据评论中提出的一些有效观点来比较长随机字符串的时间:

# 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))

输出:

Time for function using any: 0.1342546
Time for function using if-then: 0.0201827

如果-那么几乎是一个数量级快于任何!

xzv2uavs

xzv2uavs4#

这将测试字符串是否由某些组合或数字、美元符号和逗号组成。这就是你要找的吗

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"
qcbq4gxm

qcbq4gxm5#

我的简单,简单,简单的方法!=D

编码

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!")

输出

Char "$" detected!
Char "," detected!
Char "0" detected!
Char "1" detected!
qco9c6ql

qco9c6ql6#

检查字符串中是否有字符:

parse_string = lambda chars, string: [char in string for char in chars]

例如:

parse_string('$,x', 'The criminals stole $1,000,000 in ....')

parse_string(['$', ',', 'x'], '..minals stole $1,000,000 i..')

输出:[True, True, False]

s4chpxco

s4chpxco7#

另一种方法,也许是pythonic,是这样的:

aString = """The criminals stole $1,000,000 in jewels."""
#
if any(list(map(lambda char: char in aString, '0123456789,$')))
   print(True) # Do something.
pjngdqdw

pjngdqdw8#

将字母数字、空格、连字符和句号替换为空格,然后计算剩余字符数:

import re
s = 'hello%world/'
specialCharacters = re.sub('[a-zA-Z0-9-\s\.()]',','',s)
print( "Special Characters:", specialCharacters )
print( "Length:", len( specialCharacters ) )

结果是:

Special Characters: $/
Length: 2

然后你可以扩展正则表达式,例如,如果你想包括引号或问号作为普通字符。

2fjabf4q

2fjabf4q9#

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")

否则:
print(“非空格特殊字符”)

相关问题