Làm thế nào tôi có thể kiểm tra xem một chuỗi có một số ký tự cụ thể trong đó bằng Python 2?
Ví dụ: cho chuỗi sau:
Những tên tội phạm đã đánh cắp 1.000.000 đô la trong trang sức.
Làm cách nào để phát hiện nếu nó có dấu hiệu đô la ["$"], dấu phẩy [","] và số?
Dòng Tên
1.6551 Huy hiệu vàng31 Huy hiệu bạc39 Huy hiệu đồng1 gold badge31 silver badges39 bronze badges
Đã hỏi ngày 4 tháng 3 năm 2011 lúc 1:47Mar 4, 2011 at 1:47
3
Giả sử chuỗi của bạn là
pattern = re.compile[r'\d\$,']
if pattern.findall[s]:
print['Found']
else
print['Not found']
7:'$' 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
Và như vậy cho các nhân vật khác.
... hoặc
pattern = re.compile[r'\d\$,']
if pattern.findall[s]:
print['Found']
else
print['Not found']
... hoặc
chars = set['0123456789$,']
if any[[c in chars] for c in s]:
print['Found']
else:
print['Not Found']
[Chỉnh sửa: Đã thêm câu trả lời
pattern = re.compile[r'\d\$,']
if pattern.findall[s]:
print['Found']
else
print['Not found']
8]Đã trả lời ngày 4 tháng 3 năm 2011 lúc 2:07Mar 4, 2011 at 2:07
dappawitdappawitdappawit
11.8k2 Huy hiệu vàng31 Huy hiệu bạc26 Huy hiệu đồng2 gold badges31 silver badges26 bronze badges
7
Người dùng Jochen Ritzel đã nói điều này trong một bình luận cho câu trả lời cho câu hỏi này từ người dùng Dappawit. Nó sẽ hoạt động:
['1' in var] and ['2' in var] and ['3' in var] ...
'1', '2', v.v ... nên được thay thế bằng các ký tự bạn đang tìm kiếm.
Xem trang này trong tài liệu Python 2.7 để biết một số thông tin về các chuỗi, bao gồm về việc sử dụng toán tử
pattern = re.compile[r'\d\$,']
if pattern.findall[s]:
print['Found']
else
print['Not found']
9 để kiểm tra chuỗi con.
Cập nhật: Điều này làm công việc tương tự như đề xuất trên của tôi với ít lặp lại hơn: 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
Đã trả lời ngày 4 tháng 3 năm 2011 lúc 2:39Mar 4, 2011 at 2:39
AbbafeiabbafeiAbbafei
3.0283 huy hiệu vàng26 Huy hiệu bạc24 Huy hiệu đồng3 gold badges26 silver badges24 bronze badges
2
So sánh nhanh thời gian để đáp ứng với bài viết của 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
Vì vậy, mã nhỏ gọn hơn với bất kỳ, nhưng nhanh hơn với điều kiện.
EDIT: TL; DR-Đối với các chuỗi dài, nếu-sau đó vẫn nhanh hơn nhiều so với bất kỳ chuỗi nào! TL;DR -- For long strings, if-then is still much faster than any!
Tôi quyết định so sánh thời gian cho một chuỗi ngẫu nhiên dài dựa trên một số điểm hợp lệ được nêu trong các bình luận:
# 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-thì gần như là một thứ tự nhanh hơn bất kỳ thứ tự nào!
Đã trả lời ngày 14 tháng 7 năm 2015 lúc 17:11Jul 14, 2015 at 17:11
Dòng TênJesuisme
1.6551 Huy hiệu vàng31 Huy hiệu bạc39 Huy hiệu đồng1 gold badge31 silver badges39 bronze badges
3
Đã hỏi ngày 4 tháng 3 năm 2011 lúc 1:47
Giả sử chuỗi của bạn làpattern = re.compile[r'\d\$,']
if pattern.findall[s]:
print['Found']
else
print['Not found']
7:Và như vậy cho các nhân vật khác.Mar 4, 2011 at 2:01
... hoặcajwood
[Chỉnh sửa: Đã thêm câu trả lời
8]15 gold badges59 silver badges102 bronze badgespattern = re.compile[r'\d\$,']
if pattern.findall[s]:
print['Found']
else
print['Not found']
3
Đã trả lời ngày 4 tháng 3 năm 2011 lúc 2:07=D
dappawitdappawit
pattern = re.compile[r'\d\$,']
if pattern.findall[s]:
print['Found']
else
print['Not found']
011.8k2 Huy hiệu vàng31 Huy hiệu bạc26 Huy hiệu đồng
pattern = re.compile[r'\d\$,']
if pattern.findall[s]:
print['Found']
else
print['Not found']
1
bad_coder
Người dùng Jochen Ritzel đã nói điều này trong một bình luận cho câu trả lời cho câu hỏi này từ người dùng Dappawit. Nó sẽ hoạt động:20 gold badges39 silver badges64 bronze badges
'1', '2', v.v ... nên được thay thế bằng các ký tự bạn đang tìm kiếm.Dec 29, 2020 at 15:27
Xem trang này trong tài liệu Python 2.7 để biết một số thông tin về các chuỗi, bao gồm về việc sử dụng toán tử
pattern = re.compile[r'\d\$,']
if pattern.findall[s]:
print['Found']
else
print['Not found']
9 để kiểm tra chuỗi con.Eduardo LucioCập nhật: Điều này làm công việc tương tự như đề xuất trên của tôi với ít lặp lại hơn:1 gold badge19 silver badges34 bronze badges
Đã trả lời ngày 4 tháng 3 năm 2011 lúc 2:39
pattern = re.compile[r'\d\$,']
if pattern.findall[s]:
print['Found']
else
print['Not found']
2example:
pattern = re.compile[r'\d\$,']
if pattern.findall[s]:
print['Found']
else
print['Not found']
3Abbafeiabbafei
pattern = re.compile[r'\d\$,']
if pattern.findall[s]:
print['Found']
else
print['Not found']
43.0283 huy hiệu vàng26 Huy hiệu bạc24 Huy hiệu đồng
So sánh nhanh thời gian để đáp ứng với bài viết của Abbafei:Mar 16, 2021 at 18:19
Vì vậy, mã nhỏ gọn hơn với bất kỳ, nhưng nhanh hơn với điều kiện.Felix
EDIT: TL; DR-Đối với các chuỗi dài, nếu-sau đó vẫn nhanh hơn nhiều so với bất kỳ chuỗi nào!2 bronze badges
Tôi quyết định so sánh thời gian cho một chuỗi ngẫu nhiên dài dựa trên một số điểm hợp lệ được nêu trong các bình luận:pythonic, is this:
pattern = re.compile[r'\d\$,']
if pattern.findall[s]:
print['Found']
else
print['Not found']
5If-thì gần như là một thứ tự nhanh hơn bất kỳ thứ tự nào!Nov 6 at 0:12
Đã trả lời ngày 14 tháng 7 năm 2015 lúc 17:11NYCeyes
Dòng Tên5 gold badges53 silver badges61 bronze badges
pattern = re.compile[r'\d\$,']
if pattern.findall[s]:
print['Found']
else
print['Not found']
6Điều này sẽ kiểm tra nếu các chuỗi được tạo thành từ một số kết hợp hoặc chữ số, dấu hiệu đô la và dấu phẩy. Đó có phải là những gì bạn đang tìm kiếm?
print["Non Space Special Character"]
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"Aug 21, 2018 at 15:36
Đã trả lời ngày 4 tháng 3 năm 2011 lúc 2:01Nagaraj
Ajwoodajwood2 gold badges5 silver badges8 bronze badges
2