নির্দিষ্ট অক্ষরগুলির জন্য একটি স্ট্রিং কীভাবে চেক করবেন? [বন্ধ]


182

পাইথন 2 ব্যবহার করে কোনও স্ট্রিংয়ের কয়েকটি নির্দিষ্ট অক্ষর রয়েছে কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?

উদাহরণস্বরূপ, নিম্নলিখিত স্ট্রিং দেওয়া:

অপরাধীরা w 1,000,000 রত্ন চুরি করেছিল।

এর মধ্যে ডলারের লক্ষণ ("$"), কমা (",") এবং সংখ্যা আছে কিনা আমি কীভাবে সনাক্ত করব?


1
তার মানে কি প্রতিটি চরিত্রকে এর মধ্যে একটি হওয়ার কথা, বা এই চরিত্রগুলির মধ্যে একটি (বা সমস্ত) স্ট্রিংয়ে উপস্থিত রয়েছে কি যথেষ্ট? এটি বৈধ হওয়ার জন্য তাদের কি কিছু ক্রমে (যেমন: $ 2,00) থাকতে হবে?
নুল ইউজারএক্সেপশন

2
ঠিক ভিন্ন ধরণের পদ্ধতির মতো, not set(p).isdisjoint(set("0123456789$,"))যেখানে pপরীক্ষা করার স্ট্রিং।
কেভিন

উত্তর:


265

আপনার স্ট্রিং ধরে নিচ্ছেন 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উত্তরগুলি যোগ করেছেন ]


20
s.find('$')!=-1=> '$' in s:-)
জোচেন রিটজেল

পাওয়া যায় না কেন এমন কোনও বিশেষ কারণ আছে যা মান পাওয়া যায়নি -1 এবং 0 নয়?
আক্কি

2
@akki পাওয়া যায় নি -1, কারণ 0 একটি স্ট্রিংয়ের প্রথম অক্ষরের সূচক। সুতরাং "abc" .ফাইন্ড ('a') = 0. এটি যদি দ্বিধাগ্রস্ত হয় তবে 0 যদি মানটিও পাওয়া যায় না।
লেম্যান্ট

1
আমি শেষ সংস্করণটি ব্যবহার করে পছন্দ করি any()cপাইথোনিক স্টাইলে পাওয়া অক্ষরটির উল্লেখ করার কোনও উপায় আছে (এটি any()কেবলমাত্র অভ্যন্তরীণভাবে বিভক্ত বলে মনে হয় ), অথবা আমার বেশ কয়েকটি চরিত্রের অনুসন্ধান আরও স্পষ্ট করে দেখাতে হবে?
জেনস 0

3
দ্বিতীয় উদাহরণটি নষ্ট হয়েছে: রেজেক্সের বন্ধনী থাকা দরকার r'[\d\$,]'তাই এটি যে কোনও অক্ষরের সাথে মেলে এবং শেষটি কোলনটি else:অনুপস্থিত।
bjnord

23

ব্যবহারকারী জোচেন রিটজেল ব্যবহারকারী ড্যাপাওয়েটের এই প্রশ্নের উত্তরের মন্তব্যে এ কথা বলেছেন। এটি কাজ করা উচিত:

('1' in var) and ('2' in var) and ('3' in var) ...

'1', '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

+1 এটি একাধিক। ফাইন্ড () এর চেয়ে আরও কমপ্যাক্ট, এবং যতক্ষণ অনুসন্ধান করা অক্ষরের সংখ্যা কম থাকে ততক্ষণ তা ঠিক। যদিও প্রথম বন্ধনী প্রয়োজন নেই।
শন

1
@ সিয়েন প্রথম বন্ধনী সম্পর্কে: আমি জানি, তবে অগ্রাধিকার ক্রমটি সর্বদা :-) মনে রাখার চেয়ে আমার পক্ষে সর্বদা সেগুলি ব্যবহার করা সহজ।
আব্বাফাই

11

আব্বাফির পোস্টের প্রতিক্রিয়ায় সময়ের সাথে দ্রুত তুলনা:

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

সুতরাং কোডটি যে কোনওটির সাথে আরও কমপ্যাক্ট, তবে শর্তযুক্তের সাথে দ্রুত।


সম্পাদনা করুন: টিএল; ডিআর - দীর্ঘ স্ট্রিংয়ের জন্য, যদি-তবে এখনও যে কোনওটির চেয়ে বেশি দ্রুত!

আমি মন্তব্যগুলিতে উত্থাপিত কিছু বৈধ পয়েন্টের ভিত্তিতে দীর্ঘ র‌্যান্ডম স্ট্রিংয়ের জন্য সময়টির তুলনা করার সিদ্ধান্ত নিয়েছি:

# 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

যদি-তবে প্রায় কোনও তুলনায় দ্রুততার ক্রম!


1
ঠিক আমি কী জানতে চেয়েছিলাম :-)
লার্স

1
শর্তাধীন যে কোনও ব্যবহারের চেয়ে এত দ্রুত কেন তা ব্যাখ্যা করতে সক্ষম কেউ?
জোশ

@ জোশ সম্ভবত এটি কারণ এটি সহজ। Func1 বিস্ফোরিত তালিকা বোঝার ব্যবহার করে তাই এর স্বয়ংক্রিয়ভাবে সহজ জিনিসের জন্য আরও জটিল a তবে 1000 টি অক্ষরের জন্য, ফানক 1
হ্যাক 5

@ হ্যাক 5 ধরুন, phraseএ থেকে জেড পর্যন্ত বর্ণমালাগুলির সাথে একটি স্ট্রিং রয়েছে এবং আমি মুদ্রণ করতে চাই যে কোন বর্ণমালা একসাথে স্ট্রিংয়ে উপস্থিত নেই any()আরও ভাল হবে? বা চেক করার কোনও ছোট উপায় আছে?
অবভিশক দত্ত রায়

@ বেয়ারফেসড বেয়ার এই ধরণের স্তরে, যাকে ভাল লাগবে তা চয়ন করুন। গতিটি সম্ভবত কোনও ব্যাপার নয়, যদি না আপনি
নিউকসকে

5

স্ট্রিংগুলি কিছু সংমিশ্রণ বা অঙ্কগুলি, ডলার চিহ্ন এবং একটি কমা দিয়ে গঠিত কিনা এটি পরীক্ষা করবে। আপনি কি এটি খুঁজছেন?

আমদানি পুনরায়

s1 = 'পরীক্ষার স্ট্রিং'
s2 = '1234,12345 $'

regex = re.compile ('[0-9, $] + $')

যদি (regex.match (s1)):
   "এস 1 টি মিলছে" মুদ্রণ করুন
অন্য:
   "এস 1 মেলে না" মুদ্রণ করুন

যদি (regex.match (s2)):
   "এস 2 মিলছে" মুদ্রণ করুন
অন্য:
   "এস 2 মেলে না" মুদ্রণ করুন

আপনাকে কোনও চরিত্রের শ্রেণিতে থাকলে escape এড়াতে হবে না। এছাড়াও এটি মিলবে 'testing $tring', যা আমি মনে করি না যে ওপিটি ঘটতে চায় is
নুল ইউজারএক্সেপশন

আমি যদি সঠিকভাবে স্মরণ 'testing $tring'করি তবে matchপদ্ধতিটি যদি ব্যবহার করা হয় তবে এটি তার সাথে মেলে না search। সুতরাং আমি তার কোড ঠিক আছে বলে মনে করি।
দাপাওয়েট

@dappa এটা এখনও ম্যাচ হবে '$string'যদিও
NullUserException

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

অন্য:
মুদ্রণ ("স্পেস নন স্পেশাল ক্যারেক্টার")


1
আপনি দয়া করে আপনার উত্তরে আরও কিছু প্রসঙ্গ সরবরাহ করতে পারেন।
পিতল বানর

একটি স্ট্রিংয়ে উপস্থিত অক্ষরের প্রকার পরীক্ষা করা হচ্ছে: ইসলনাম (): সমস্ত অক্ষর বর্ণানুক্রমিক (a to z, A to Z, 0 to9) isalpha (): সত্য হয় যদি সমস্ত অক্ষর কেবল বর্ণমালার প্রতীক (a to z, এ টু জেড), ইসডিজিট (): সমস্ত অক্ষর কেবলমাত্র অঙ্ক (0 থেকে 9) ইজলোয়ার (): সত্য হয় যদি সমস্ত অক্ষর ছোট হাতের বর্ণমালার প্রতীক আইসুপার () হয় সত্য হয়: সমস্ত অক্ষর বড় হাতের অক্ষরের প্রতীক হলে সত্যটি ফেরত দেয় istitle (): রিটার্নস যদি সত্য হয় স্ট্রিং শিরোনাম ক্ষেত্রে isspace () রয়েছে: রিটার্নস যদি সত্য হয় স্ট্রিং শুধুমাত্র শূণ্যস্থান @LazerBass রয়েছে
নাগরাজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.