সমস্ত অ-অক্ষরীয় অক্ষর একটি স্ট্রিংয়ে প্রতিস্থাপন করুন


102

আমার একটি স্ট্রিং রয়েছে যার সাথে আমি এমন কোনও অক্ষর প্রতিস্থাপন করতে চাই যা কোনও মান অক্ষর বা সংখ্যার মতো নয় (অ্যাজে বা 0-9) একটি নক্ষত্রের সাথে। উদাহরণস্বরূপ, "h ^ & ell`।, | Ow] {+ orld" "h * ell * o * w * orld" দিয়ে প্রতিস্থাপন করা হয়েছে। নোট করুন যে একাধিক অক্ষর যেমন "^ &" একটি নক্ষত্রের সাথে প্রতিস্থাপিত হয়। আমি কীভাবে এটি করতে যাব?


উত্তর:


188

রেগেক্সে উদ্ধার!

import re

s = re.sub('[^0-9a-zA-Z]+', '*', s)

উদাহরণ:

>>> re.sub('[^0-9a-zA-Z]+', '*', 'h^&ell`.,|o w]{+orld')
'h*ell*o*w*orld'

7
আপনি যদি re.sub("[\x00-\x2F\x3A-\x40\x5B-\x60\x7B-\x7F]+", " ", ":%# unicode ΣΘΙП@./\n")
ইউনিকোডকে

আপনি যদি আপনার স্ট্রিংয়ে ফাঁকা স্থান রাখতে চান তবে বন্ধনীগুলির মধ্যে কেবল একটি স্থান যুক্ত করুন: s = re.sub ('[^ 0-9a-zA-Z] +', '*', s)
stackPusher

4
যদি একাধিক প্রতিস্থাপন করা হয়, আপনি যদি রেজেক্স প্রাক-সংকলন করেন তবে এটি কিছুটা দ্রুত সম্পাদন করবে, যেমনimport re; regex = re.compile('[^0-9a-zA-Z]+'); regex.sub('*', 'h^&ell.,|o w]{+orld')
ক্রিস

নোটটি শব্দহীন\W অক্ষরের জন্য, এটি প্রায় একই রকম তবে আন্ডারস্কোরটিকে শব্দের চরিত্র হিসাবে অনুমতি দেয় (কেন তা জানেন না): ডকস.পিথথন.অর্গ
জেএইচএস

রেজেক্সে আপনার '+' লাগবে না
সার্জ

39

অজগর উপায়।

print "".join([ c if c.isalnum() else "*" for c in s ])

এটি যদিও একাধিক টানা একযোগে অনাবিল অক্ষরগুলির গোষ্ঠীকরণের সাথে কাজ করে না

"h^&i => "h**iনা "h*i"Regex সমাধান হিসাবে।


11

চেষ্টা করুন:

s = filter(str.isalnum, s)

পাইথন 3 এ:

s = ''.join(filter(str.isalnum, s))

সম্পাদনা: উপলব্ধি করেছে যে ওপি '*' দিয়ে নন-চরিত্রগুলি প্রতিস্থাপন করতে চায়। আমার উত্তর মানায় না


11

\Wসমান যে ব্যবহার করুন [^a-zA-Z0-9_]। ডকুমেন্টেশনটি https://docs.python.org/2/library/re.html দেখুন

Import re
s =  'h^&ell`.,|o w]{+orld'
replaced_string = re.sub(r'\W+', '*', s)
output: 'h*ell*o*w*orld'

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


4
নোটটি কেবল পাইথন ২.x এর \Wসমান is [^a-zA-Z0-9_]পাইথন ৩.x এ, / পতাকা ব্যবহার করা হয় তবেই \W+সমান । [^a-zA-Z0-9_]re.ASCIIre.A
উইক্টর স্ট্রিবিউউ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.