আমাকে স্ট্রিং থেকে সমস্ত বিশেষ অক্ষর, বিরামচিহ্ন এবং স্পেসগুলি সরিয়ে ফেলতে হবে যাতে আমার কেবল অক্ষর এবং সংখ্যা থাকে।
আমাকে স্ট্রিং থেকে সমস্ত বিশেষ অক্ষর, বিরামচিহ্ন এবং স্পেসগুলি সরিয়ে ফেলতে হবে যাতে আমার কেবল অক্ষর এবং সংখ্যা থাকে।
উত্তর:
এটি রেজেক্স ছাড়াই করা যেতে পারে:
>>> string = "Special $#! characters spaces 888323"
>>> ''.join(e for e in string if e.isalnum())
'Specialcharactersspaces888323'
আপনি ব্যবহার করতে পারেন str.isalnum
:
S.isalnum() -> bool Return True if all characters in S are alphanumeric and there is at least one character in S, False otherwise.
আপনি যদি রেজেক্স ব্যবহার করার জন্য জেদ করেন তবে অন্যান্য সমাধানগুলি ঠিকঠাক করবে। তবে মনে রাখবেন যে এটি যদি নিয়মিত এক্সপ্রেশন না ব্যবহার করে করা যায়, তবে এটি সবচেয়ে ভাল উপায়।
isalnum()
এবং রেইগেক্স সংস্করণকেই বেঞ্চমার্ক করেছি এবং
একটি অক্ষর বা সংখ্যা নয় এমন অক্ষরের একটি স্ট্রিংয়ের সাথে মিল দেওয়ার জন্য এখানে একটি রেজেক্স রয়েছে:
[^A-Za-z0-9]+
একটি রেজেক্স প্রতিস্থাপন করার জন্য পাইথন কমান্ডটি এখানে:
re.sub('[^A-Za-z0-9]+', '', mystring)
+
এর দক্ষতা কিছুটা বাড়ানোর জন্য আমি একটি কোয়ান্টিফায়ার যুক্ত করব ))
[^A-Za-z0-9 ]+
খাটো উপায়:
import re
cleanString = re.sub('\W+','', string )
আপনি যদি শব্দ এবং সংখ্যার মধ্যে ফাঁক চান তবে '' এর সাথে ''
r'\W+'
- সামান্য অফ টপিক (এবং খুব পেডেন্টিক) তবে আমি একটি অভ্যাসের পরামর্শ দিচ্ছি যে সমস্ত রেজেক্স প্যাটার্নগুলি কাঁচা স্ট্রিং হোক
এটি দেখার পরে, আমি স্বল্প সময়ের মধ্যে কোনটি সম্পাদন করে তা সরবরাহ করে জবাবগুলি প্রসারিত করতে আগ্রহী ছিলাম, তাই আমি গিয়ে timeit
দুটি প্রস্তাবিত উত্তরগুলির সাথে দুটি উদাহরণের সাথে পরীক্ষা করেছি:
string1 = 'Special $#! characters spaces 888323'
string2 = 'how much for the maple syrup? $20.99? That s ricidulous!!!'
'.join(e for e in string if e.isalnum())
string1
- ফলাফল: 10.7061979771string2
- ফলাফল: 7.78372597694import re
re.sub('[^A-Za-z0-9]+', '', string)
string1
- ফলাফল: 7.10785102844string2
- ফলাফল: 4.12814903259import re
re.sub('\W+','', string)
string1
- ফলাফল: 3.11899876595string2
- ফলাফল: 2.78014397621উপরের ফলাফলগুলি সর্বনিম্ন থেকে নিম্নতম প্রাপ্ত ফলাফলের একটি পণ্য: repeat(3, 2000000)
উদাহরণ 3 উদাহরণ 1 এর চেয়ে 3x দ্রুত হতে পারে ।
''.join([*filter(str.isalnum, string)])
আমি মনে করি শুধু filter(str.isalnum, string)
কাজ করে
In [20]: filter(str.isalnum, 'string with special chars like !,#$% etcs.')
Out[20]: 'stringwithspecialcharslikeetcs'
পাইথন 3-এ, filter( )
ফাংশনটি একটি সংযোজনযোগ্য বস্তুটি ফেরত দেবে (উপরে বর্ণিত স্ট্রিংয়ের পরিবর্তে)। সংক্ষিপ্ত বিবরণ থেকে স্ট্রিং পেতে একজনকে ফিরে যেতে হবে:
''.join(filter(str.isalnum, string))
বা list
যোগদানের ব্যবহারে পাস ( নিশ্চিত নয় তবে কিছুটা দ্রুত হতে পারে )
''.join([*filter(str.isalnum, string)])
দ্রষ্টব্য: পাইথন> = 3.5[*args]
থেকে বৈধ ইনপ্যাকিং
map
, filter
এবং reduce
পরিবর্তে ইয়ারটেবল অবজেক্টটি প্রদান করে। তবুও পাইথন 3 + এ আমি গৃহীত উত্তরের চেয়ে বেশি পছন্দ করব ''.join(filter(str.isalnum, string))
(বা যোগদানের তালিকাতে পাস করতে ''.join([*filter(str.isalnum, string)])
))
''.join(filter(str.isalnum, string))
improvement filter(str.isalnum, string)
এটি কি আসলেই পাইথারনিক (হ্যাঁ, আপনি এটি ব্যবহার করতে পারেন) এটি করার উপায়?
filter(str.isalnum, string)
Python3 ফিরে আসতে না স্ট্রিং হিসেবে filter( )
Python3 মধ্যে পাইথন-2 অসদৃশ যুক্তি টাইপ বদলে পুনরুক্তিকারীর ফেরৎ + +।
#!/usr/bin/python
import re
strs = "how much for the maple syrup? $20.99? That's ricidulous!!!"
print strs
nstr = re.sub(r'[?|$|.|!]',r'',strs)
print nstr
nestr = re.sub(r'[^a-zA-Z0-9 ]',r'',nstr)
print nestr
আপনি আরও বিশেষ চরিত্র যুক্ত করতে পারেন এবং এর পরিবর্তে '' এর অর্থ কিছুই হবে না সেগুলি মুছে ফেলা হবে।
ভিন্নভাবে চেয়ে বাকিদের Regex ব্যবহার করেছিল আমি প্রতি চরিত্র বাদ দেওয়ার চেষ্টা করবে না পরিবর্তে স্পষ্টভাবে enumerating আমি না চান, আমি কি চাই।
উদাহরণস্বরূপ, আমি যদি 'এ টু জেড' (উচ্চ এবং নিম্ন কেস) এবং সংখ্যাগুলি থেকে কেবল অক্ষর চাই, তবে আমি অন্য সমস্ত কিছু বাদ দেব:
import re
s = re.sub(r"[^a-zA-Z0-9]","",s)
এর অর্থ "শূন্য স্ট্রিং সহ প্রতিটি অক্ষর যা একটি সংখ্যা নয়, বা 'a to z' বা" A to Z "রেঞ্জের একটি অক্ষরকে প্রতিস্থাপন করবে"।
আসলে, আপনি যদি ^
আপনার রেজেক্সের প্রথম স্থানে বিশেষ চরিত্রটি সন্নিবেশ করান তবে আপনি প্রত্যাখ্যান পাবেন।
অতিরিক্ত টিপ: আপনার যদি ফলাফলটি ছোট করার প্রয়োজন হয় তবে আপনি রেজিজকে আরও দ্রুত এবং সহজ করে তুলতে পারবেন, যতক্ষণ না আপনি এখন পর্যন্ত কোনও বড় হাতের অক্ষর খুঁজে পাবেন না।
import re
s = re.sub(r"[^a-z0-9]","",s.lower())
ধরে নিই যে আপনি একটি রেজেক্স ব্যবহার করতে চান এবং আপনার ইউনিকোড-কগনিজেন্ট ২.x কোডটি প্রয়োজন যা 2to3- এর জন্য প্রস্তুত:
>>> import re
>>> rx = re.compile(u'[\W_]+', re.UNICODE)
>>> data = u''.join(unichr(i) for i in range(256))
>>> rx.sub(u'', data)
u'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\xaa\xb2 [snip] \xfe\xff'
>>>
সর্বাধিক জেনারিক পন্থাটি ইউনিকোডেটাটা টেবিলের 'বিভাগগুলি' ব্যবহার করে যা প্রতিটি একক চরিত্রকে শ্রেণিবদ্ধ করে। যেমন নীচের কোডগুলি কেবল তাদের বিভাগের ভিত্তিতে মুদ্রণযোগ্য অক্ষরগুলি ফিল্টার করে:
import unicodedata
# strip of crap characters (based on the Unicode database
# categorization:
# http://www.sql-und-xml.de/unicode-database/#kategorien
PRINTABLE = set(('Lu', 'Ll', 'Nd', 'Zs'))
def filter_non_printable(s):
result = []
ws_last = False
for c in s:
c = unicodedata.category(c) in PRINTABLE and c or u'#'
result.append(c)
return u''.join(result).replace(u'#', u' ')
সমস্ত সম্পর্কিত বিভাগের জন্য উপরে প্রদত্ত ইউআরএলটি দেখুন। বিরামচিহ্ন বিভাগ দ্বারা আপনি অবশ্যই ফিল্টার করতে পারেন।
$
প্রতিটি লাইনের শেষে কী আছে ?
স্ট্রিং.পঞ্চকুয়েশনে নিম্নলিখিত অক্ষর রয়েছে:
' "# $% & \!' () * + - / :; <=> @ [\] ^: _ '।? {|} ~'
খালি মানগুলিতে বিরামচিহ্নগুলি মানচিত্র করতে আপনি অনুবাদ এবং মেকট্রান্স ফাংশন ব্যবহার করতে পারেন (প্রতিস্থাপন)
import string
'This, is. A test!'.translate(str.maketrans('', '', string.punctuation))
আউটপুট:
'This is A test'
অনুবাদ ব্যবহার করুন:
import string
def clean(instr):
return instr.translate(None, string.punctuation + ' ')
ক্যাভেট: কেবলমাত্র এসকি স্ট্রিংয়ের উপর কাজ করে।
TypeError: translate() takes exactly one argument (2 given)
3.4
import re
my_string = """Strings are amongst the most popular data types in Python. We can create the strings by enclosing characters in quotes. Python treats single quotes the
ডাবল উদ্ধৃতি হিসাবে একই। ""
# if we need to count the word python that ends with or without ',' or '.' at end
count = 0
for i in text:
if i.endswith("."):
text[count] = re.sub("^([a-z]+)(.)?$", r"\1", i)
count += 1
print("The count of Python : ", text.count("python"))
import re
abc = "askhnl#$%askdjalsdk"
ddd = abc.replace("#$%","")
print (ddd)
এবং আপনি আপনার ফলাফল হিসাবে দেখতে পাবেন
'askhnlaskdjalsdk
re
তবে এটি কখনও ব্যবহার করেন নি। আপনার replace
মানদণ্ড কেবল এই নির্দিষ্ট স্ট্রিংয়ের জন্য কাজ করে। যদি আপনার স্ট্রিং হয় abc = "askhnl#$%!askdjalsdk"
? আমি মনে করি না #$%
প্যাটার্ন ব্যতীত অন্য কোনও কাজ করবে । এটি টুইট করতে পারে
বিরামচিহ্নগুলি, সংখ্যা এবং বিশেষ অক্ষর মুছে ফেলা হচ্ছে
উদাহরণ: -
কোড
combi['tidy_tweet'] = combi['tidy_tweet'].str.replace("[^a-zA-Z#]", " ")
ধন্যবাদ :)