231
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
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.6251 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']
6:'$' 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']
7]Đã trả lời ngày 4 tháng 3 năm 2011 lúc 2:07Mar 4, 2011 at 2:07
dappawitdappawitdappawit
11.7K2 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']
8 để 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.6251 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
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"
Giả sử chuỗi của bạn là
pattern = re.compile[r'\d\$,']
if pattern.findall[s]:
print['Found']
else
print['Not found']
6:Mar 4, 2011 at 2:01
Và như vậy cho các nhân vật khác.ajwood
... hoặc15 gold badges58 silver badges100 bronze badges
3
[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']
7]=DĐã trả lời ngày 4 tháng 3 năm 2011 lúc 2:07
pattern = re.compile[r'\d\$,']
if pattern.findall[s]:
print['Found']
else
print['Not found']
0dappawitdappawit
pattern = re.compile[r'\d\$,']
if pattern.findall[s]:
print['Found']
else
print['Not found']
1
bad_coder
11.7K2 Huy hiệu vàng31 Huy hiệu bạc26 Huy hiệu đồng19 gold badges38 silver badges62 bronze badges
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:Dec 29, 2020 at 15:27
'1', '2', v.v ... nên được thay thế bằng các ký tự bạn đang tìm kiếm.Eduardo Lucio
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ử
8 để kiểm tra chuỗi con.1 gold badge19 silver badges33 bronze badgespattern = re.compile[r'\d\$,']
if pattern.findall[s]:
print['Found']
else
print['Not found']
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:
pattern = re.compile[r'\d\$,']
if pattern.findall[s]:
print['Found']
else
print['Not found']
2Đã 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']
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
pattern = re.compile[r'\d\$,']
if pattern.findall[s]:
print['Found']
else
print['Not found']
5Tô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:
print["Non Space Special Character"]
If-thì gần như là một thứ tự nhanh hơn bất kỳ thứ tự nào!Aug 21, 2018 at 15:36
Đã trả lời ngày 14 tháng 7 năm 2015 lúc 17:11Nagaraj
Dòng Tên2 gold badges5 silver badges8 bronze badges
2