উত্তর:
>>> import re
>>> re.sub("[^0-9]", "", "sdkjh987978asd098as0980a98sd")
'987978098098098'
এটি সবচেয়ে কার্যকর উপায় কিনা তা নিশ্চিত নয় তবে:
>>> ''.join(c for c in "abc123def456" if c.isdigit())
'123456'
''.joinঅংশ মানে মধ্যে যে কোন অক্ষর ছাড়া একসঙ্গে সব ফলে অক্ষর একত্রিত করতে হবে। তারপরে এটির বাকি অংশগুলি একটি তালিকা উপলব্ধি, যেখানে (আপনি সম্ভবত অনুমান করতে পারেন) আমরা কেবল স্ট্রিংয়ের অংশগুলি গ্রহণ করি যা শর্তের সাথে মেলে isdigit।
এটি পাইথন 2 এ স্ট্রিং এবং ইউনিকোড উভয় পদার্থ এবং পাইথন 3-এ উভয় স্ট্রিং এবং বাইটের জন্য কাজ করা উচিত:
# python <3.0
def only_numerics(seq):
return filter(type(seq).isdigit, seq)
# python ≥3.0
def only_numerics(seq):
seq_type= type(seq)
return seq_type().join(filter(seq_type.isdigit, seq))
মিক্সটিতে কেবল অন্য বিকল্প যুক্ত করতে stringমডিউলটিতে বেশ কয়েকটি দরকারী ধ্রুবক রয়েছে । অন্যান্য ক্ষেত্রে আরও কার্যকর হলেও এগুলি এখানে ব্যবহার করা যেতে পারে।
>>> from string import digits
>>> ''.join(c for c in "abc123def456" if c in digits)
'123456'
মডিউলটিতে বেশ কয়েকটি ধ্রুবক রয়েছে যার মধ্যে রয়েছে:
ascii_letters (AbcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ)hexdigits (0123456789abcdefABCDEF)আপনি যদি এই ধ্রুবকগুলি ভারীভাবে ব্যবহার করেন তবে এগুলিকে একটি এটিকে গোপন করা সার্থক হতে পারে frozenset। এটি ও (1) অনুসন্ধানগুলি সক্ষম করে ও (এন) এর পরিবর্তে, যেখানে n মূল স্ট্রিংগুলির জন্য ধ্রুবকের দৈর্ঘ্য।
>>> digits = frozenset(digits)
>>> ''.join(c for c in "abc123def456" if c in digits)
'123456'
দ্রুততম পদ্ধতির, যদি আপনাকে কেবল এইরকম এক বা দু'টি অপসারণ অপারেশন (বা কেবলমাত্র একটি, তবে একটি দীর্ঘ দীর্ঘ স্ট্রিংয়ের উপর! -) প্রয়োজন হয়, তার জন্য translateস্ট্রিংয়ের পদ্ধতির উপর নির্ভর করতে হবে যদিও এর জন্য কিছু প্রস্তুতি প্রয়োজন:
>>> import string
>>> allchars = ''.join(chr(i) for i in xrange(256))
>>> identity = string.maketrans('', '')
>>> nondigits = allchars.translate(identity, string.digits)
>>> s = 'abc123def456'
>>> s.translate(identity, nondigits)
'123456'
translateপদ্ধতি বিভিন্ন হয়তো একটি বাচ্চা ব্যবহারের সহজ সহজ, এবং, ইউনিকোড স্ট্রিং উপর তুলনায় এটি বাইট স্ট্রিং চালু থাকে, তখন BTW:
>>> unondig = dict.fromkeys(xrange(65536))
>>> for x in string.digits: del unondig[ord(x)]
...
>>> s = u'abc123def456'
>>> s.translate(unondig)
u'123456'
আপনি প্রকৃত ডিকের পরিবর্তে ম্যাপিং ক্লাসটি ব্যবহার করতে চাইতে পারেন, বিশেষত যদি আপনার ইউনিকোড স্ট্রিংয়ে খুব উচ্চ আদেশের মান থাকতে পারে (এটি ডিকটি অত্যধিক আকারে বড় করে তোলে ;-))। উদাহরণ স্বরূপ:
>>> class keeponly(object):
... def __init__(self, keep):
... self.keep = set(ord(c) for c in keep)
... def __getitem__(self, key):
... if key in self.keep:
... return key
... return None
...
>>> s.translate(keeponly(string.digits))
u'123456'
>>>
(sys.maxunicode - number_of_non_numeric_chars)এন্ট্রি থাকতে পারে । ()) স্ট্রিং.ডিজিটগুলি ইউনিকোডেডাটা মডিউলটি ফাটানোর প্রয়োজনীয়তার পক্ষে পর্যাপ্ত পরিমাণে নাও রয়েছে কিনা তা বিবেচনা করুন (৪) সরলতা এবং সম্ভাবনার জন্য রি.সুব (আর '(? ইউ) \ ডি +', ইউ ', টেক্সট) বিবেচনা করুন গতি.
অনেকগুলি সঠিক উত্তর তবে আপনি রেজিেক্স ব্যবহার না করে সরাসরি ফ্লোটে এটি চান:
x= '$123.45M'
float(''.join(c for c in x if (c.isdigit() or c =='.'))
123,45
আপনার প্রয়োজনের উপর নির্ভর করে আপনি কমাটির জন্য পয়েন্টটি পরিবর্তন করতে পারেন।
আপনি যদি জানেন যে আপনার নম্বরটি পূর্ণসংখ্যা হয় তবে এর জন্য পরিবর্তন করুন
x='$1123'
int(''.join(c for c in x if c.isdigit())
1123