স্ট্রিং থেকে সংখ্যাগুলি সরানো হচ্ছে [বন্ধ]


120

আমি কীভাবে একটি স্ট্রিং থেকে অঙ্কগুলি সরাতে পারি?


19
সাথে re:result = re.sub(r'[0-9]+', '', s)
উইক্টর স্ট্রিবিউউ

রেজেক্সের সাথে আপনাকে \ যোগ করতে হবে \ এছাড়াও, এটি আমি মনে করি দশমিক সংখ্যা হতে পারে। মত ফলাফল = পুনঃসুব (আর '[0-9 \।] +', '', গুলি)
গুরহানকাগিন

1
"\d"একটি রেজেক্সে একই "[0-9]", তাই আপনি result = re.sub(r"\d+", "", s)পরিবর্তে করতে পারেন । স্পিড সম্ভবত নির্দিষ্ট স্ট্রিংটি ব্যবহৃত হচ্ছে তার উপর নির্ভর করবে, তবে আমার জন্য, re.subপ্রায় দ্বিগুণ দীর্ঘ সময় নিয়েছে str.translate(আপনি যদি প্রাক-সংকলিত প্যাটার্নটি ব্যবহার না করেন তবে খানিকটা বেশি)।
নাথান

উত্তর:


185

এটি কি আপনার পরিস্থিতির জন্য কাজ করবে?

>>> s = '12abcd405'
>>> result = ''.join([i for i in s if not i.isdigit()])
>>> result
'abcd'

এটি একটি তালিকা উপলব্ধি ব্যবহার করে এবং এখানে যা ঘটছে তা এই কাঠামোর সাথে সমান:

no_digits = []
# Iterate through the string, adding non-numbers to the no_digits list
for i in s:
    if not i.isdigit():
        no_digits.append(i)

# Now join all elements of the list with '', 
# which puts all of the characters together.
result = ''.join(no_digits)

@ অশ্বিনীচৌধারি এবং @ কিরকস্ট্রেজার ইঙ্গিত হিসাবে, আপনাকে আসলে ওয়ান-লাইনারে বন্ধনী ব্যবহার করার দরকার নেই, বন্ধনীগুলির ভিতরে টুকরাটি একটি জেনারেটর এক্সপ্রেশন (তালিকার বোঝার চেয়ে আরও কার্যকর) তৈরি করে। এমনকি যদি এটি আপনার কার্যভারের জন্য প্রয়োজনীয়তার সাথে খাপ খায় না, অবশেষে এটি আপনাকে পড়া উচিত :):

>>> s = '12abcd405'
>>> result = ''.join(i for i in s if not i.isdigit())
>>> result
'abcd'

পুনঃটুইট করেছেন আমি নিশ্চিত যে আমি এই সাইটে অন্য কারও কাছ থেকে জানতে পেরেছি, সুতরাং চক্রটি সম্পূর্ণ হয়েছে :)
রকেটডনকি

@ রকেটডনকির কোনও প্রয়োজন নেই[]
অশ্বিনী

3
পাইথন ২.7 এবং তদূর্ধ্বে, তালিকা বোধের চারপাশে আপনার বন্ধনীগুলির প্রয়োজন নেই। আপনি এগুলি ছেড়ে যেতে পারেন এবং এটি একটি জেনারেটর এক্সপ্রেশন হয়ে যায়।
কर्क স্ট্রুজার

স্থির - ধন্যবাদ @ অশ্বিনীচৌধারি / @ কির্কট্রেউসার।
রকেটডনকি

@ রকেটডনকি কিছু ব্যাখ্যাও যুক্ত করুন, কেবল কোডটি দেখলে আমার ধারণা করা ওপি সাহায্য করবে না।
অশ্বিনী চৌধুরী চৌধুরী

97

এবং, এটি কেবল মিশ্রণে ফেলে দিতে হয়, এটি হল ভুলে যাওয়া str.translateযা লুপিং / নিয়মিত এক্সপ্রেশনগুলির চেয়ে অনেক দ্রুত কাজ করবে:

পাইথন 2 এর জন্য:

from string import digits

s = 'abc123def456ghi789zero0'
res = s.translate(None, digits)
# 'abcdefghizero'

পাইথন 3 এর জন্য:

from string import digits

s = 'abc123def456ghi789zero0'
remove_digits = str.maketrans('', '', digits)
res = s.translate(remove_digits)
# 'abcdefghizero'

13
এই পদ্ধতির পাইথন 3 এ কাজ করবে না। পরিবর্তে করুন: 'abc123def456ghi789zero0'.translate({ord(k): None for k in digits})
ভ্যালিনিতেভ

3
পাইথন 2 এর সেরা সমাধান
হর্ষ ওয়ারধন

ইউনিকোড চরিত্রের স্ট্রিংয়ের জন্য কাজ করে না
হ্যারি এম

20

আপনার শিক্ষক আপনাকে ফিল্টার ব্যবহারের অনুমতি দেয় কিনা তা নিশ্চিত নন তবে ...

filter(lambda x: x.isalpha(), "a1a2a3s3d4f5fg6h")

returns-

'aaasdffgh'

লুপিংয়ের চেয়ে অনেক বেশি দক্ষ ...

উদাহরণ:

for i in range(10):
  a.replace(str(i),'')

1
এটি পরিবর্তে এটি ফেরত দেয়: <ফিল্টার অবজেক্ট 0x03475FD0>
লোন_কোডার


5

মাত্র কয়েকটি (অন্যরা এর মধ্যে কিছু পরামর্শ দিয়েছে)

পদ্ধতি 1:

''.join(i for i in myStr if not i.isdigit())

পদ্ধতি 2:

def removeDigits(s):
    answer = []
    for char in s:
        if not char.isdigit():
            answer.append(char)
    return ''.join(char)

পদ্ধতি 3:

''.join(filter(lambda x: not x.isdigit(), mystr))

পদ্ধতি 4:

nums = set(map(int, range(10)))
''.join(i for i in mystr if i not in nums)

পদ্ধতি 5:

''.join(i for i in mystr if ord(i) not in range(48, 58))

2
এগুলির সাথে দক্ষতার তুলনা দেখানো সার্থক হবে।
এভিস্টেস্ট

2

বলুন যে সেন্ট আপনার অরক্ষিত স্ট্রিং, তারপরে চালান

st_nodigits=''.join(i for i in st if i.isalpha())

উপরে উল্লিখিত. তবে আমার অনুমান যে আপনার খুব সাধারণ কিছু দরকার তাই বলুন s আপনার স্ট্রিং এবং st_res হ'ল অঙ্ক ছাড়াই একটি স্ট্রিং, তারপরে এখানে আপনার কোড

l = ['0','1','2','3','4','5','6','7','8','9']
st_res=""
for ch in s:
 if ch not in l:
  st_res+=ch

1

আমি এটি সম্পাদন করতে রেগেক্স ব্যবহার করতে চাই তবে আপনি কেবল তালিকা, লুপ, ফাংশন ইত্যাদি ব্যবহার করতে পারেন,

এখানে আমি কী নিয়ে এসেছি:

stringWithNumbers="I have 10 bananas for my 5 monkeys!"
stringWithoutNumbers=''.join(c if c not in map(str,range(0,10)) else "" for c in stringWithNumbers)
print(stringWithoutNumbers) #I have  bananas for my  monkeys!

1

যদি আমি আপনার প্রশ্নটি সঠিকভাবে বুঝতে পারি তবে একটি উপায় হ'ল অক্ষরে স্ট্রিংটি ভাঙ্গা এবং তারপরে প্রতিটি স্ট্রিংয়ের প্রতিটি অক্ষরটি লুপ ব্যবহার করে এটি স্ট্রিং বা একটি সংখ্যা কিনা তা পরীক্ষা করুন এবং তারপরে যদি স্ট্রিংটি এটি পরিবর্তনশীলে সংরক্ষণ করে এবং তারপরে একবার লুপ হয় is শেষ হয়ে গেছে, এটি ব্যবহারকারীর কাছে প্রদর্শন করুন


একটি ফর লুপ স্বয়ংক্রিয়ভাবে একটি স্ট্রিংয়ের প্রতিটি চরিত্রের মাধ্যমে পুনরাবৃত্তি করে, তাই স্ট্রিংটিকে চরগুলিতে ভাঙার দরকার নেই।
অশ্বিনী চৌধুরী চৌধুরী
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.