পাইথনের একটি স্ট্রিং থেকে সংখ্যাগুলি কীভাবে বের করা যায়?


432

আমি একটি স্ট্রিং মধ্যে থাকা সমস্ত নম্বর বের করতে হবে। উদ্দেশ্য, নিয়মিত অভিব্যক্তি বা isdigit()পদ্ধতির জন্য কোনটি সবচেয়ে বেশি উপযুক্ত ?

উদাহরণ:

line = "hello 12 hi 89"

ফলাফল:

[12, 89]

উত্তর:


485

আপনি যদি কেবলমাত্র ইতিবাচক পূর্ণসংখ্যার নিষ্কাশন করতে চান তবে নিম্নলিখিতগুলি চেষ্টা করুন:

>>> str = "h3110 23 cat 444.4 rabbit 11 2 dog"
>>> [int(s) for s in str.split() if s.isdigit()]
[23, 11, 2]

আমি যুক্তি দিয়ে বলব যে তিনটি কারণে এটি রেগেক্স উদাহরণের চেয়ে ভাল। প্রথমত, আপনার আর একটি মডিউল প্রয়োজন হবে না; দ্বিতীয়ত, এটি আরও পঠনযোগ্য কারণ আপনার রেজিেক্স মিনি-ভাষা পার্স করার দরকার নেই; এবং তৃতীয়ত, এটি দ্রুত (এবং সম্ভবত আরও পাইথোনিক):

python -m timeit -s "str = 'h3110 23 cat 444.4 rabbit 11 2 dog' * 1000" "[s for s in str.split() if s.isdigit()]"
100 loops, best of 3: 2.84 msec per loop

python -m timeit -s "import re" "str = 'h3110 23 cat 444.4 rabbit 11 2 dog' * 1000" "re.findall('\\b\\d+\\b', str)"
100 loops, best of 3: 5.66 msec per loop

এটি ভাসা, নেতিবাচক পূর্ণসংখ্যা বা হেক্সাডেসিমাল ফর্ম্যাটে পূর্ণসংখ্যাকে চিনতে পারবে না। আপনি যদি এই সীমাবদ্ধতাগুলি গ্রহণ করতে না পারেন তবে নীচে স্লিমের উত্তরটি কৌশলটি করবে।


5
এটি "h3110 23 বিড়াল 444.4 খরগোশ 11-2 কুকুর" এর মতো ক্ষেত্রে ব্যর্থ হবে
sharafjaffri

8
আদর্শিক কেসটি ব্যবহার করছে re। এটি একটি সাধারণ এবং শক্তিশালী সরঞ্জাম (যাতে আপনি খুব দরকারী কিছু শিখেন)। লগ পার্সিংয়ে গতি কিছুটা অপ্রাসঙ্গিক (এটি সর্বোপরি কোনও নিবিড় সংখ্যাসূচক সমাধানকারী নয়), reমডিউলটি পাইথন লাইব্রেরিতে রয়েছে এবং এটি লোড করতে ক্ষতি করে না।
আইওনিস ফিলিপিসিস

19
আমার মতো স্ট্রিং ছিল mumblejumble45mumblejumbleযেখানে আমি জানতাম যে কেবল একটি সংখ্যা রয়েছে। সমাধানটি সহজভাবে int(filter(str.isdigit, your_string))
জোনাস লিন্ডেলভ

1
একটি সামান্য মন্তব্য: আপনি পরিবর্তনশীলটি সংজ্ঞায়িত করুন strযা এরপরে strবেস পাইথনে বস্তু এবং পদ্ধতিটিকে ওভাররাইড করে । স্ক্রিপ্ট পরে আপনার এটি প্রয়োজন হতে পারে, কারণ এটি ভাল অনুশীলন নয়।
জোনাস লিন্ডেলভ

11
int(filter(...))TypeError: int() argument must be a string...পাইথন 3.5 এর জন্য উত্থাপন করবে , যাতে আপনি আপডেট সংস্করণ ব্যবহার করতে পারেন: int(''.join(filter(str.isdigit, your_string)))সমস্ত সংখ্যাকে একক পূর্ণসংখ্যায় বের করার জন্য।
মিশন

449

আমি একটি regexp ব্যবহার করব:

>>> import re
>>> re.findall(r'\d+', 'hello 42 I\'m a 32 string 30')
['42', '32', '30']

এই থেকে 42 মেলে দিবে bla42bla। আপনি যদি কেবলমাত্র শব্দের সীমানা (স্পেস, পিরিয়ড, কমা) দ্বারা সীমাবদ্ধ সংখ্যা চান তবে আপনি \ বি ব্যবহার করতে পারেন:

>>> re.findall(r'\b\d+\b', 'he33llo 42 I\'m a 32 string 30')
['42', '32', '30']

স্ট্রিংগুলির তালিকার পরিবর্তে সংখ্যার তালিকা দিয়ে শেষ করতে:

>>> [int(s) for s in re.findall(r'\b\d+\b', 'he33llo 42 I\'m a 32 string 30')]
[42, 32, 30]

9
... এবং তারপরে ম্যাপ করুন intএবং আপনার কাজ শেষ। +1 বিশেষ করে পরবর্তী অংশের জন্য। r'\b\d+\b' == '\\b\\d+\\b'যদিও আমি কাঁচা স্ট্রিং ( ) পরামর্শ দিই ।

5
এটি একটি জেনারেটরের সাথে একটি তালিকায় রাখা যেতে পারে, যেমন:int_list = [int(s) for s in re.findall('\\d+', 'hello 12 hi 89')]
গ্রিনম্যাট

7
@ গ্রিনম্যাট: এটি প্রযুক্তিগতভাবে একটি তালিকা উপলব্ধি (জেনারেটর নয়) তবে আমি সম্মত হব যে বোঝাপড়া / জেনারেটর এর চেয়ে বেশি পাইথোনিক map
শেঠ জনসন

1
@ শেঠ জনসন: ওফ! আপনি ঠিক বলেছেন, আমি ভুলভাবে টাইপ করেছি যা স্পষ্টভাবে মনের একটি কুয়াশাচ্ছন্ন অবস্থা ছিল। :-( সংশোধনের জন্য ধন্যবাদ!
গ্রিনম্যাট

2
যদিও আমার একটা সমস্যা আছে যদি আমি "হ্যালো 1.45 হাই" তে 1.45 এর মতো ভাসা সংখ্যাগুলিও বের করতে চাই তবে কী হবে। এটি আমাকে 1 এবং 45 কে দুটি পৃথক নম্বর হিসাবে দেবে
ab123

89

এটি কিছুটা দেরির চেয়ে বেশি তবে আপনি বৈজ্ঞানিক স্বরলিপি হিসাবে অ্যাকাউন্টে রেজেক্স এক্সপ্রেশনটি প্রসারিত করতে পারেন।

import re

# Format is [(<string>, <expected output>), ...]
ss = [("apple-12.34 ba33na fanc-14.23e-2yapple+45e5+67.56E+3",
       ['-12.34', '33', '-14.23e-2', '+45e5', '+67.56E+3']),
      ('hello X42 I\'m a Y-32.35 string Z30',
       ['42', '-32.35', '30']),
      ('he33llo 42 I\'m a 32 string -30', 
       ['33', '42', '32', '-30']),
      ('h3110 23 cat 444.4 rabbit 11 2 dog', 
       ['3110', '23', '444.4', '11', '2']),
      ('hello 12 hi 89', 
       ['12', '89']),
      ('4', 
       ['4']),
      ('I like 74,600 commas not,500', 
       ['74,600', '500']),
      ('I like bad math 1+2=.001', 
       ['1', '+2', '.001'])]

for s, r in ss:
    rr = re.findall("[-+]?[.]?[\d]+(?:,\d\d\d)*[\.]?\d*(?:[eE][-+]?\d+)?", s)
    if rr == r:
        print('GOOD')
    else:
        print('WRONG', rr, 'should be', r)

সব ভাল দেয়!

অতিরিক্তভাবে, আপনি অ্যাডাব্লুএস গ্লু অন্তর্নির্মিত রেজেক্সে দেখতে পারেন


1
যেহেতু এটি যে কারও পছন্দ করার একমাত্র উত্তর, এখানে বৈজ্ঞানিক স্বরলিপি দিয়ে কীভাবে এটি করা যায় "[- +]? \ D + [\।]? \ D * [Ee]? \ D *"। বা কিছু প্রকরণ। আনন্দ কর!
aidan.plenert.macdonald

সরল ক্ষেত্রে যেমন s = "4"কোন সমস্যা আছে তা সন্ধান করুন যেমন কোনও মিল নেই। এটিকে যত্ন নেওয়ার জন্য কি পুনরায় সম্পাদনা করা যেতে পারে?
batFINGER

1
দুর্দান্ত তবে এটি কমাগুলি হ্যান্ডেল করে না (উদাঃ 74,600)
ইয়েকটা

আরও ভার্জোজ গ্রুপটি হ'ল [+-]?\d*[\.]?\d*(?:(?:[eE])[+-]?\d+)?এই গোষ্ঠীটি কিছু মিথ্যা ধনাত্মকতা দেয় (অর্থাত্ +কখনও কখনও নিজেই এটি ধরা পড়ে) তবে এটি আরও ফর্মগুলি পরিচালনা করতে সক্ষম হয়, যেমন .001এটি স্বয়ংক্রিয়ভাবে সংখ্যার সংমিশ্রণ করে না (যেমন পছন্দ করে s=2+1)
ডেভিসডুড

24
হ্যাঁ হ্যাঁ, সুস্পষ্ট [-+]?[.]?[\d]+(?:,\d\d\d)*[\.]?\d*(?:[eE][-+]?\d+)?- আমার এত নির্বোধ ... আমি কীভাবে এটি ভাবতে পারি না?
প্রেজেমেক ডি

70

আমি ধরে নিচ্ছি যে আপনি কেবল পূর্ণসংখ্যা নয় ভাসমান চান তাই আমি এরকম কিছু করব:

l = []
for t in s.split():
    try:
        l.append(float(t))
    except ValueError:
        pass

মনে রাখবেন যে এখানে পোস্ট করা অন্যান্য কয়েকটি সমাধান নেতিবাচক সংখ্যার সাথে কাজ করে না:

>>> re.findall(r'\b\d+\b', 'he33llo 42 I\'m a 32 string -30')
['42', '32', '30']

>>> '-3'.isdigit()
False

এটি ইতিবাচক এবং নেতিবাচক ভাসমান এবং পূর্ণসংখ্যার সন্ধান করে। কেবল ইতিবাচক এবং নেতিবাচক পূর্ণসংখ্যার জন্য, এ পরিবর্তন floatকরুন int
হুগো

3
নেতিবাচক সংখ্যার জন্য:re.findall("[-\d]+", "1 -2")
ytpillai

আমরা লুপের continueপরিবর্তে লিখলে কি কোনও পার্থক্য রয়েছে pass?
ডি জোন্স

এটি কেবলমাত্র ইতিবাচক পূর্ণসংখ্যার চেয়ে বেশি, তবে বিভাজন () ব্যবহার করে এমন নম্বর মিস হবে যা মুদ্রার চিহ্ন রয়েছে যেখানে প্রথম অঙ্কের পূর্বে কোনও স্থান নেই, যা আর্থিক নথিতে সাধারণ
মার্ক ম্যাক্সমিস্টার

অন্যান্য অক্ষরের সাথে কোনও স্থান নেই এমন ভাসমানগুলির জন্য কাজ করে না, উদাহরণস্বরূপ: '4.5 কে জিনিস' কাজ করবে, '4.5k জিনিস' কাজ করবে না।
জে ডি

64

যদি আপনি জানেন তবে এটি স্ট্রিংয়ের কেবল একটি নম্বর হবে, অর্থাত 'হ্যালো 12 হাই', আপনি ফিল্টারটি চেষ্টা করতে পারেন।

উদাহরণ স্বরূপ:

In [1]: int(''.join(filter(str.isdigit, '200 grams')))
Out[1]: 200
In [2]: int(''.join(filter(str.isdigit, 'Counters: 55')))
Out[2]: 55
In [3]: int(''.join(filter(str.isdigit, 'more than 23 times')))
Out[3]: 23

তবে সাবধান! :

In [4]: int(''.join(filter(str.isdigit, '200 grams 5')))
Out[4]: 2005

12
পাইথনে ৩.6.৩ এ আমি পেয়েছি TypeError: int() argument must be a string, a bytes-like object or a number, not 'filter'- এটি ব্যবহার করে এটি ঠিক করেছিলামint("".join(filter(str.isdigit, '200 grams')))
কেন্ট মুন্তে ক্যাসপারসেন

16
# extract numbers from garbage string:
s = '12//n,_@#$%3.14kjlw0xdadfackvj1.6e-19&*ghn334'
newstr = ''.join((ch if ch in '0123456789.-e' else ' ') for ch in s)
listOfNumbers = [float(i) for i in newstr.split()]
print(listOfNumbers)
[12.0, 3.14, 0.0, 1.6e-19, 334.0]

3
SO এ আপনাকে স্বাগতম এবং উত্তর পোস্ট করার জন্য ধন্যবাদ। আপনার উত্তরটিতে এবং কেবল একটি কোড স্নিপেট পোস্ট করার চেয়ে সমস্যাটি কেন সমাধান করে তাতে কিছু অতিরিক্ত মন্তব্য যুক্ত করা সর্বদা ভাল অনুশীলন।
sebs

আমার ক্ষেত্রে কাজ হয়নি। উপরের উত্তর থেকে খুব আলাদা নয়
oldboy

ভ্যালুআরার: স্ট্রিংটিকে ফ্লোটে রূপান্তর করতে পারেনি: 'ই' এবং এটি কিছু ক্ষেত্রে কাজ করে না :(
ভিলিক

15

আমি স্ট্রিংয়ের মুখোশগুলি মুছে ফেলার একটি সমাধান খুঁজছিলাম, বিশেষত ব্রাজিলীয় ফোন নম্বর থেকে, এই পোস্টটির উত্তর দেওয়া হয়নি তবে আমাকে অনুপ্রাণিত করেছে। এটি আমার সমাধান:

>>> phone_number = '+55(11)8715-9877'
>>> ''.join([n for n in phone_number if n.isdigit()])
'551187159877'

12

নীচে রেজেক্স ব্যবহার করার উপায়

lines = "hello 12 hi 89"
import re
output = []
#repl_str = re.compile('\d+.?\d*')
repl_str = re.compile('^\d+$')
#t = r'\d+.?\d*'
line = lines.split()
for word in line:
        match = re.search(repl_str, word)
        if match:
            output.append(float(match.group()))
print (output)

সন্ধানের সাথে re.findall(r'\d+', "hello 12 hi 89")

['12', '89']

re.findall(r'\b\d+\b', "hello 12 hi 89 33F AC 777")

 ['12', '89', '777']

আপনার অন্তত Regex কম্পাইল করা উচিত যদি তোমরা ব্যবহার করছেন নাfindall()
information_interchange

2
repl_str = re.compile('\d+.?\d*') হওয়া উচিত: repl_str = re.compile('\d+\.?\d*') পাইথন re.search(re.compile(r'\d+.?\d*'), "42G").group() 3.7 '42 জি' re.search(re.compile(r'\d+\.?\d*'), "42G").group() '42' ব্যবহার করে পুনরুত্পাদনযোগ্য উদাহরণের জন্য
অ্যালেক্সিস লুকাটিনি

8
line2 = "hello 12 hi 89"
temp1 = re.findall(r'\d+', line2) # through regular expression
res2 = list(map(int, temp1))
print(res2)

ওহে ,

আপনি ফাইন্ডল এক্সপ্রেশন ব্যবহার করে অঙ্কের মাধ্যমে স্ট্রিংয়ের সমস্ত সংখ্যার সন্ধান করতে পারেন।

দ্বিতীয় ধাপে একটি তালিকা পুনরায় তৈরি করুন 2 এবং এই তালিকায় স্ট্রিংয়ে পাওয়া অঙ্কগুলি যুক্ত করুন

আশাকরি এটা সাহায্য করবে

শুভেচ্ছা, দিবাকর শর্মা


প্রদত্ত উত্তরটি নিম্ন মানের পোস্ট হিসাবে পর্যালোচনার জন্য পতাকাঙ্কিত করা হয়েছিল। আমি কীভাবে একটি ভাল উত্তর লিখতে পারি তার জন্য এখানে কিছু গাইডলাইন রয়েছে ? । এই প্রদত্ত উত্তরটি সঠিক হতে পারে, তবে এটি একটি ব্যাখ্যা থেকে উপকৃত হতে পারে। কোডের উত্তরগুলিকে "ভাল" উত্তর হিসাবে বিবেচনা করা হয় না। পর্যালোচনা থেকে ।
ট্রেনটন ম্যাককিনি

সহজ এবং কাজের সমাধান, প্রশংসা
মোয়ো

7

সংখ্যাটি স্ট্রিংয়ে ভাসমান অবস্থায় এই উত্তরটিতেও কেস থাকে

def get_first_nbr_from_str(input_str):
    '''
    :param input_str: strings that contains digit and words
    :return: the number extracted from the input_str
    demo:
    'ab324.23.123xyz': 324.23
    '.5abc44': 0.5
    '''
    if not input_str and not isinstance(input_str, str):
        return 0
    out_number = ''
    for ele in input_str:
        if (ele == '.' and '.' not in out_number) or ele.isdigit():
            out_number += ele
        elif out_number:
            break
    return float(out_number)

5

আমি অবাক হয়ে দেখলাম যে এখনও কেউ এ itertools.groupbyঅর্জনের বিকল্প হিসাবে ব্যবহারের কথা উল্লেখ করেনি ।

স্ট্রিং থেকে সংখ্যাগুলি বের করার জন্য আপনি itertools.groupby()পাশাপাশি ব্যবহার করতে পারেন str.isdigit():

from itertools import groupby
my_str = "hello 12 hi 89"

l = [int(''.join(i)) for is_digit, i in groupby(my_str, str.isdigit) if is_digit]

মানটি হোল্ড হ'ল l:

[12, 89]

পিএস: এটি কেবল উদাহরণ হিসাবে দেখানোর জন্য যে বিকল্প হিসাবে আমরা এটি groupbyঅর্জনের জন্যও ব্যবহার করতে পারি। তবে এটি কোনও প্রস্তাবিত সমাধান নয়। আপনি যদি এটি অর্জন করতে চান তবে আপনার উচিত ফিল্টার হিসাবে তালিকা বোধগম্যতার উপর ভিত্তি করে ফর্মের স্বীকৃত উত্তরটি ব্যবহার করা str.isdigit


4

আমি কেবল এই উত্তরটি যুক্ত করছি কারণ এক্সেসপশন হ্যান্ডলিং ব্যবহার করে কেউই যুক্ত করেনি এবং কারণ এটি ভাসমানদের জন্যও কাজ করে

a = []
line = "abcd 1234 efgh 56.78 ij"
for word in line.split():
    try:
        a.append(float(word))
    except ValueError:
        pass
print(a)

আউটপুট:

[1234.0, 56.78]

3

বিভিন্ন নিদর্শন ধরতে এটি বিভিন্ন নিদর্শনগুলির সাথে ক্যোয়ারী সহায়ক।

সমস্ত প্যাটার্ন সেটআপ করুন যা আগ্রহের বিভিন্ন সংখ্যা নিদর্শনগুলিকে ধরে ফেলে:

(কমা খুঁজে পান) 12,300 বা 12,300.00

'[\ ঘ] [।, \ ঘ]'

(ফ্লোট সন্ধান করে) 0.123 বা .123 3

'[\ ঘ] * [।] [\ ঘ]'

(পূর্ণসংখ্যার সন্ধান করে) 123

'[\ ঘ]'

পাইপ (|) দিয়ে একাধিক বা শর্তসাপেক্ষে এক ধরণে একত্রিত করুন ।

(দ্রষ্টব্য: প্রথমে জটিল নিদর্শনগুলি রাখুন অন্য সাধারণ সরল নিদর্শনগুলি পূর্ণ ক্যাচে ফিরে আসা জটিল ক্যাচের পরিবর্তে জটিল ক্যাচের অংশগুলি ফিরিয়ে দেবে)।

p = '[\d]+[.,\d]+|[\d]*[.][\d]+|[\d]+'

নীচে, আমরা একটি প্যাটার্ন উপস্থিত রয়েছে তা নিশ্চিত করব re.search(), তারপরে ক্যাচের একটি পুনরাবৃত্ত তালিকাটি ফিরিয়ে দেব । পরিশেষে, আমরা ম্যাচ অবজেক্ট থেকে ম্যাচ অবজেক্টের রিটার্ন মানটি সাবলেট করতে বন্ধনী স্বরলিপি ব্যবহার করে প্রতিটি ক্যাপ মুদ্রণ করব।

s = 'he33llo 42 I\'m a 32 string 30 444.4 12,001'

if re.search(p, s) is not None:
    for catch in re.finditer(p, s):
        print(catch[0]) # catch is a match object

রিটার্নস:

33
42
32
30
444.4
12,001

2

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

এটি ইন্ডিয়ান লাক্স নম্বর সিস্টেম পরিচালনা করে যেখানে কমাগুলি অনিয়মিতভাবে উপস্থিত হয়, প্রতি 3 নম্বর পৃথক করে না।

এটি বৈজ্ঞানিক স্বরলিপি বা হস্তান্তর করে না বাজেটের মধ্যে প্রথম বন্ধনীর ভিতরে রাখা negativeণাত্মক সংখ্যা - ইতিবাচক প্রদর্শিত হবে।

এটি খেজুরও বের করে না। স্ট্রিংগুলিতে তারিখগুলি খুঁজে পাওয়ার আরও ভাল উপায় রয়েছে।

import re
def find_numbers(string, ints=True):            
    numexp = re.compile(r'[-]?\d[\d,]*[\.]?[\d{2}]*') #optional - in front
    numbers = numexp.findall(string)    
    numbers = [x.replace(',','') for x in numbers]
    if ints is True:
        return [int(x.replace(',','').split('.')[0]) for x in numbers]            
    else:
        return numbers

1

@ জেমনস, আপনার উত্তরটি আমি পছন্দ করেছি, তবে এটি ভাসমান খুঁজে পাওয়া যায় নি। আমি একটি সিএনসি মিলে কোড পার্স করার জন্য একটি স্ক্রিপ্টে কাজ করছি এবং এক্স এবং ওয়াই উভয় মাত্রার সন্ধান করতে হবে যা পূর্ণসংখ্যা বা ভাসমান হতে পারে, তাই আমি আপনার কোডটি নীচের সাথে মানিয়ে নিয়েছি। এটি ইতিবাচক এবং নেতিবাচক ভ্যালসগুলি সহ ভেসে বেড়াচ্ছে। এখনও হেক্স ফর্ম্যাট করা মানগুলি খুঁজে পাওয়া যায় না তবে আপনি "এক্স" এবং "এ" num_charটিপলের সাথে "এফ" এর মাধ্যমে যুক্ত করতে পারেন এবং আমার মনে হয় এটি '0x23AC' এর মতো জিনিসগুলি বিশ্লেষণ করবে।

s = 'hello X42 I\'m a Y-32.35 string Z30'
xy = ("X", "Y")
num_char = (".", "+", "-")

l = []

tokens = s.split()
for token in tokens:

    if token.startswith(xy):
        num = ""
        for char in token:
            # print(char)
            if char.isdigit() or (char in num_char):
                num = num + char

        try:
            l.append(float(num))
        except ValueError:
            pass

print(l)

0

আমি খুঁজে পেয়েছি সেরা বিকল্প নীচে। এটি একটি সংখ্যা বের করবে এবং যে কোনও ধরণের চরকে নির্মূল করতে পারে।

def extract_nbr(input_str):
    if input_str is None or input_str == '':
        return 0

    out_number = ''
    for ele in input_str:
        if ele.isdigit():
            out_number += ele
    return float(out_number)    

0

ফোন নম্বরগুলির জন্য আপনি কেবলমাত্র রেজিজেটে \ ডি সহ সমস্ত অ-অঙ্কের অক্ষর বাদ দিতে পারেন:

import re

phone_number = '(619) 459-3635'
phone_number = re.sub(r"\D", "", phone_number)
print(phone_number)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.