[英]How to check a string for specific characters?
如何使用 Python 2 檢查字符串中是否包含多個特定字符?
例如,給定以下字符串:
犯罪分子偷走了價值 1,000,000 美元的珠寶。
如何檢測它是否有美元符號 ("$")、逗號 (",") 和數字?
假設你的字符串是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
答案中添加了'$' in s
]
用戶 Jochen Ritzel 在評論用戶 dappawit 對此問題的回答時說到。 它應該工作:
('1' in var) and ('2' in var) and ('3' in var) ...
'1'、'2' 等應替換為您要查找的字符。
有關字符串的一些信息,包括有關使用in
運算符進行子字符串測試的信息,請參閱Python 2.7 文檔中的此頁面。
更新:這與我上面的建議做同樣的工作,但重復次數更少:
# 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
響應 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
所以代碼更緊湊,但條件更快。
編輯: 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
如果-那么幾乎比任何一個都快一個數量級!
這將測試字符串是否由某些組合或數字、美元符號和逗號組成。 這就是你要找的嗎?
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"
我的簡單,簡單,簡單的方法! =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!
謝謝!
檢查字符是否在字符串中:
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]
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("非空格特殊字符")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.