首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何检查字符串中的特定字符?

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

Stack Overflow用户
提问于 2011-03-04 09:47:25
回答 6查看 792.8K关注 0票数 218

如何使用Python 2检查一个字符串中是否有几个特定的字符?

例如,给定以下字符串:

这些罪犯偷走了价值一百万美元的珠宝。

如何检测它是否有美元符号("$")、逗号(",")和数字?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-03-04 10:07:17

假设您的字符串为s

代码语言:javascript
复制
'$' 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

对于其他角色,依此类推。

..。或

代码语言:javascript
复制
pattern = re.compile(r'\d\$,')
if pattern.findall(s):
    print('Found')
else
    print('Not found')

..。或

代码语言:javascript
复制
chars = set('0123456789$,')
if any((c in chars) for c in s):
    print('Found')
else:
    print('Not Found')

编辑:添加了'$' in s答案

票数 308
EN

Stack Overflow用户

发布于 2011-03-04 10:39:10

用户Jochen Ritzel在评论中回答了用户dappawit的这个问题。它应该是有效的:

代码语言:javascript
复制
('1' in var) and ('2' in var) and ('3' in var) ...

“%1”、“%2”等应替换为您要查找的字符。

有关字符串的一些信息,请参见this page in the Python 2.7 documentation,包括使用in运算符进行子字符串测试。

更新:这与我上面的建议做得一样,重复的次数更少:

代码语言:javascript
复制
# 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
票数 29
EN

Stack Overflow用户

发布于 2015-07-15 01:11:38

Abbafei回复帖子的时间快速比较:

代码语言:javascript
复制
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))

输出:

代码语言:javascript
复制
Func1 Time: 0.0737484362111
Func2 Time: 0.0125144964371

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

EDIT : TL;DR --对于长字符串,if-then仍然比任何字符串都快!

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

代码语言:javascript
复制
# 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))

输出:

代码语言:javascript
复制
Time for function using any: 0.1342546
Time for function using if-then: 0.0201827

If-then几乎比任何一个都快一个数量级!

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5188792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档