একটি স্ট্রিং থেকে বিরামচিহ্ন ফেলা সর্বোত্তম উপায়


635

দেখে মনে হচ্ছে এর চেয়ে সহজতর কোনও উপায় হওয়া উচিত:

import string
s = "string. With. Punctuation?" # Sample string 
out = s.translate(string.maketrans("",""), string.punctuation)

আছে?


3
আমার বেশ সহজবোধ্য মনে হয়। কেন আপনি এটি পরিবর্তন করতে চান? আপনি যদি এটি আরও সহজ চান তবে কেবল একটি ফাংশনে যা লিখেছেন তা মোড়ানো করুন।
হ্যানস ওভরন

2
ঠিক আছে, মনে হচ্ছে এটি হাকিশের মতো কাজ করছে যাতে স্ট্র্যাটার ট্রান্সলেট এর পার্শ্ব প্রতিক্রিয়া হয়। আমি ভাবছিলাম সেখানে স্ট্রারস্ট্রিপ (চর) এর মতো আরও কিছু থাকতে পারে যা আমি মিস করা সীমানার পরিবর্তে পুরো স্ট্রিংয়ে কাজ করে।
লরেন্স জনস্টন

2
ডেটা উপরও নির্ভর করে। নামের অংশ হিসাবে আন্ডারস্কোর সহ সার্ভারের নাম রয়েছে এমন ডেটাতে এটি ব্যবহার করা খারাপ হতে পারে। কেবলমাত্র নিশ্চিত হয়ে নিন যে আপনি ডেটা এবং এটিতে কী জড়িত তা জানেন বা ক্লাবুটিক সমস্যার সাবসেট দিয়ে শেষ করতে পারেন।
ইবিগ্রিন

54
আপনি যাকে বিরামচিহ্ন বলছেন তার উপরও নির্ভর করে। " The temperature in the O'Reilly & Arbuthnot-Smythe server's main rack is 40.5 degrees." হ'ল এক বিরামচিহ্ন অক্ষর, দ্বিতীয় "the
জন ম্যাচিন

37
আমি অবাক হয়েছি এমন কেউই উল্লেখ string.punctuationকরেনি যাতে ইংরাজী বিরামচিহ্ন মোটেই অন্তর্ভুক্ত থাকে না। আমি。 ,!? : × ”" "about ইত্যাদি নিয়ে ভাবছি।
ক্লাইমেন্ট

উত্তর:


926

দক্ষতার দৃষ্টিকোণ থেকে, আপনি মারবেন না

s.translate(None, string.punctuation)

পাইথনের উচ্চতর সংস্করণগুলির জন্য নিম্নলিখিত কোডটি ব্যবহার করুন:

s.translate(str.maketrans('', '', string.punctuation))

এটি লুকের টেবিলের সাহায্যে সিতে কাঁচা স্ট্রিং ক্রিয়াকলাপ সম্পাদন করছে - এটি এমন কোনও কিছু নয় যা আপনার নিজের সি কোড লিখতে পারে beat

গতি যদি উদ্বেগের বিষয় না হয় তবে অন্য একটি বিকল্প হ'ল:

exclude = set(string.punctuation)
s = ''.join(ch for ch in s if ch not in exclude)

এটি প্রতিটি চরের সাথে s.repile এর চেয়ে দ্রুত, তবে আপনি নিচের সময়গুলি থেকে দেখতে পাচ্ছেন, রিজেক্সস বা স্ট্রিং। ট্রান্সলেট হিসাবে অ-খাঁটি অজগর পদ্ধতির পাশাপাশি সঞ্চালন করবে না। এই ধরণের সমস্যার জন্য, যতটা সম্ভব কম স্তরে এটি করা বন্ধ হয়ে যায়।

সময় কোড:

import re, string, timeit

s = "string. With. Punctuation"
exclude = set(string.punctuation)
table = string.maketrans("","")
regex = re.compile('[%s]' % re.escape(string.punctuation))

def test_set(s):
    return ''.join(ch for ch in s if ch not in exclude)

def test_re(s):  # From Vinko's solution, with fix.
    return regex.sub('', s)

def test_trans(s):
    return s.translate(table, string.punctuation)

def test_repl(s):  # From S.Lott's solution
    for c in string.punctuation:
        s=s.replace(c,"")
    return s

print "sets      :",timeit.Timer('f(s)', 'from __main__ import s,test_set as f').timeit(1000000)
print "regex     :",timeit.Timer('f(s)', 'from __main__ import s,test_re as f').timeit(1000000)
print "translate :",timeit.Timer('f(s)', 'from __main__ import s,test_trans as f').timeit(1000000)
print "replace   :",timeit.Timer('f(s)', 'from __main__ import s,test_repl as f').timeit(1000000)

এটি নিম্নলিখিত ফলাফল দেয়:

sets      : 19.8566138744
regex     : 6.86155414581
translate : 2.12455511093
replace   : 28.4436721802

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

29
দুর্দান্ত উত্তর। আপনি টেবিলটি সরিয়ে এটি সরল করতে পারেন। দস্তাবেজগুলি বলে: "কেবল অনুবাদগুলিতে কোনওটিই টেবিল যুক্তি সেট করে যা কেবলমাত্র অক্ষর মুছে দেয়" ( ডকস.পিথন.আর.গ্রিবারি / স্টাডিটাইপস html#str.translate )
আলেকজান্দ্রোস

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

36
পাইথন 3 এ, table = string.maketrans("","")প্রতিস্থাপন করা উচিত table = str.maketrans({key: None for key in string.punctuation})?
স্পার্কএন্ডশাইন

18
পাইথন ৩.6 হিসাবে আলোচনাটি আপডেট করার regexজন্য এখন সবচেয়ে দক্ষ পদ্ধতি! এটি অনুবাদ থেকে প্রায় 2x দ্রুত। এছাড়াও, সেট এবং প্রতিস্থাপন এখন আর খারাপ হয় না! তারা উভয়ই 4 :) এর একটি ফ্যাক্টর দ্বারা উন্নত হয়েছে
রায়ান সোকলস্কি

143

নিয়মিত প্রকাশগুলি আপনার পক্ষে যদি জানা থাকে তবে যথেষ্ট সহজ।

import re
s = "string. With. Punctuation?"
s = re.sub(r'[^\w\s]','',s)

4
@ আউটিলার ব্যাখ্যা: (^) শব্দের অক্ষর বা ফাঁকা স্থানটি খালি স্ট্রিংয়ের সাথে প্রতিস্থাপন করে না। সতর্কতা অবলম্বন করুন, উদাহরণস্বরূপ \ ডাব্লু এর সাথে ম্যাচগুলি খুব আন্ডারস্কোর হয় core
ম্যাথিয়াস

4
@SIslam আমার মনে হয় এটা ইউনিকোড পতাকা সেট, অর্থাত সঙ্গে ইউনিকোড সঙ্গে কাজ করবে s = re.sub(r'[^\w\s]','',s, re.UNICODE)। লিনাক্সে অজগর 3 দিয়ে এটি পরীক্ষা করা এটি তামিল বর্ণগুলি ব্যবহার করে পতাকা ছাড়াও কাজ করে தமிழ்
ম্যাথিয়াস

@ মাথিয়াস আমি ম্যাকের উপর পাইথন ৩.6.৫ এর সাথে কোডটি চেষ্টা করেছি, তামিল অক্ষরের আউটপুটটি কিছুটা আলাদা দেখাচ্ছে, ইনপুট input হয়ে যায় தமழ தமழ তামিল সম্পর্কে আমার কোন জ্ঞান নেই, আশা করি কিনা তা নিশ্চিত নই।
মে'১৯

70

ব্যবহারের সুবিধার্থে, আমি পাইথন 2 এবং পাইথন 3 উভয় স্ট্রিং থেকে স্ট্রিপিং বিরামচিহ্নের নোটটি সংযুক্ত করি detailed বিস্তারিত বর্ণনার জন্য দয়া করে অন্যান্য উত্তরগুলি দেখুন।


পাইথন 2

import string

s = "string. With. Punctuation?"
table = string.maketrans("","")
new_s = s.translate(table, string.punctuation)      # Output: string without punctuation

পাইথন ঘ

import string

s = "string. With. Punctuation?"
table = str.maketrans(dict.fromkeys(string.punctuation))  # OR {key: None for key in string.punctuation}
new_s = s.translate(table)                          # Output: string without punctuation

51
myString.translate(None, string.punctuation)

4
আহ, আমি চেষ্টা করেছিলাম কিন্তু এটি সব ক্ষেত্রে কার্যকর হয় না। myString.translate (string.maketrans ("", ""), স্ট্রিং.পুনটেকশন) ঠিকঠাক কাজ করে।
আইদন কানে

12
দ্রষ্টব্য যে strপাইথন 3 এবং unicodeপাইথন 2 এ deletecharsআর্গুমেন্ট সমর্থিত নয়।
agf

4
myString.translate (string.maketrans ("", ""), string.punctuation) ইউনিকোড স্ট্রিং দিয়ে কাজ করবে না (শক্ত
উপায়টি

44
TypeError: translate() takes exactly one argument (2 given):(
ব্রায়ান টিংল

3
@ ব্রায়ানটিঙ্গল: আমার মন্তব্যে পাইথন 3 কোডটি দেখুন (এটি একটি যুক্তি দিয়ে গেছে) পাইথন 2 কোডটি দেখতে ইউনিকোড এবং এর পাইথন 3 অভিযোজন
jfs

29

আমি সাধারণত এই জাতীয় কিছু ব্যবহার করি:

>>> s = "string. With. Punctuation?" # Sample string
>>> import string
>>> for c in string.punctuation:
...     s= s.replace(c,"")
...
>>> s
'string With Punctuation'

2
একটি uglified এক-লাইনের: reduce(lambda s,c: s.replace(c, ''), string.punctuation, s)
jfs

1
দুর্দান্ত, তবে লম্বা হাইফেনের মতো কিছু অনুশীলন সরিয়ে দেয় না
ভ্লাদিমির স্টাজিলভ

25

string.punctuationহওয়া ASCII হয় শুধুমাত্র ! আরও সঠিক (তবে আরও ধীর) উপায়টি ইউনিকোডেটা মডিউলটি ব্যবহার করা:

# -*- coding: utf-8 -*-
from unicodedata import category
s = u'String — with -  «punctation »...'
s = ''.join(ch for ch in s if category(ch)[0] != 'P')
print 'stripped', s

আপনি অন্যান্য ধরণের অক্ষরগুলিকেও সাধারণীকরণ এবং বাদ দিতে পারেন:

''.join(ch for ch in s if category(ch)[0] not in 'SP')

এটি এমন চরিত্রগুলিও ছাঁটাবে ~*+§$যা কারও দৃষ্টিভঙ্গির উপর নির্ভর করে "বিরামচিহ্ন" হতে পারে বা নাও পারে।


3
আপনি পারেন:regex.sub(ur"\p{P}+", "", text)
jfs

দুর্ভাগ্যক্রমে, মতো জিনিসগুলি ~বিরামচিহ্ন বিভাগের অংশ নয়। সিম্বলস বিভাগের জন্য আপনাকেও পরীক্ষা করতে হবে।
সিজে জ্যাকসন

24

আপনি যদি পরিবারের সাথে আরও বেশি পরিচিত হন তবে অগত্যা সহজ নয়, একটি ভিন্ন উপায়।

import re, string
s = "string. With. Punctuation?" # Sample string 
out = re.sub('[%s]' % re.escape(string.punctuation), '', s)

1
স্ট্রিং.পান্টাকুয়েশনের ক্রম রয়েছে বলে কাজ করে -। যথাযথ, আরোহী, কোন ফাঁক, ASCII ক্রমে। পাইথনের এই অধিকার রয়েছে, আপনি যখন স্ট্রিং.পঞ্চাচরণের একটি উপসেট ব্যবহার করার চেষ্টা করবেন তখন অবাক হওয়ার কারণে এটি শো-স্টপার হতে পারে "-"।
এস .লট

2
আসলে, এটি এখনও ভুল। "\]" অনুক্রমটি একটি অব্যাহতি হিসাবে বিবেচিত হয় (কাকতালীয়ভাবে এটি বন্ধ করে দিচ্ছে না] সুতরাং অন্য একটি ব্যর্থতা বাইপাস করে), তবে পাতা ছেড়ে যায়। এটি রোধ করতে আপনার পুনরায় পরীক্ষা (স্ট্রিং.পান্টিকেশন) ব্যবহার করা উচিত।
ব্রায়ান

1
হ্যাঁ, আমি এটিকে বাদ দিয়েছি কারণ এটি জিনিসগুলিকে সরল রাখার উদাহরণ হিসাবে কাজ করেছে তবে আপনি ঠিক বলেছেন যে এটি অন্তর্ভুক্ত করা উচিত।
ভিঙ্কো ভ্র্যাসালোভিক

13

পাইথন 3 strবা পাইথন 2 unicodeমানের জন্য, str.translate()কেবল একটি অভিধান নেয়; কোডিংপয়েন্টস (পূর্ণসংখ্যা) সেই ম্যাপিংয়ে দেখানো হয় এবং ম্যাপযুক্ত যে কোনও কিছুই Noneসরিয়ে ফেলা হয়।

এরপরে (কিছু?) বিরামচিহ্ন অপসারণ করতে, ব্যবহার করুন:

import string

remove_punct_map = dict.fromkeys(map(ord, string.punctuation))
s.translate(remove_punct_map)

dict.fromkeys()বর্গ পদ্ধতি এটা তুচ্ছ সব মান নির্ধারণের ম্যাপিং তৈরি করতে তোলে Noneকী ক্রম উপর ভিত্তি করে।

কেবলমাত্র ASCII বিরামচিহ্ন নয়, সমস্ত বিরামচিহ্নগুলি সরাতে আপনার টেবিলটি কিছুটা বড় হতে হবে; দেখতে জেএফ সেবাস্টিয়ান এর উত্তর (পাইথন 3 সংস্করণ):

import unicodedata
import sys

remove_punct_map = dict.fromkeys(i for i in range(sys.maxunicode)
                                 if unicodedata.category(chr(i)).startswith('P'))

ইউনিকোড সমর্থন করার জন্য, string.punctuationযথেষ্ট নয়। আমার উত্তর
jfs

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

শীর্ষ ভোটের উত্তরটি কেবলমাত্র এসকি স্ট্রিংয়ের জন্য কাজ করে। আপনার উত্তরটি ইউনিকোড সমর্থন স্পষ্টভাবে দাবি করে।
jfs

1
@ জেএসএফেসেস্টিয়ান: এটি ইউনিকোড স্ট্রিংয়ের জন্য কাজ করে। এটি ASCII বিরামচিহ্নগুলি স্ট্রিপ করে। আমি কখনও দাবি করি নি যে এগুলি সমস্ত বিরামচিহ্নকে পৃথক করে দেয়। :-) পয়েন্টটি ছিল unicodeপাইথন 2 strঅবজেক্টের জন্য বস্তুর জন্য সঠিক কৌশলটি সরবরাহ করা ।
মার্টিজন পিটারস

12

string.punctuationআসল বিশ্বে সাধারণত ব্যবহৃত প্রচুর বিরাম চিহ্নগুলি মিস করে। এমন একটি সমাধান কীভাবে যা অ-এসকিআইআই বিরামচিহ্নের জন্য কাজ করে?

import regex
s = u"string. With. Some・Really Weird、Non?ASCII。 「(Punctuation)」?"
remove = regex.compile(ur'[\p{C}|\p{M}|\p{P}|\p{S}|\p{Z}]+', regex.UNICODE)
remove.sub(u" ", s).strip()

ব্যক্তিগতভাবে, আমি বিশ্বাস করি পাইথনের স্ট্রিং থেকে বিরামচিহ্নগুলি সরিয়ে ফেলার এটি সেরা উপায় কারণ:

  • এটি সমস্ত ইউনিকোড বিরামচিহ্নগুলি সরিয়ে দেয়
  • এটি সহজেই পরিবর্তনযোগ্য, উদাহরণস্বরূপ, আপনি \{S}যদি বিরামচিহ্নগুলি সরাতে চান তবে আপনি এটি মুছতে পারেন, তবে প্রতীকগুলি পছন্দ করুন$
  • আপনি কী রাখতে চান এবং কী সরাতে চান সে সম্পর্কে আপনি সত্যই সুনির্দিষ্ট হয়ে \{Pd}উঠতে পারেন, উদাহরণস্বরূপ কেবল ড্যাশগুলি মুছে ফেলা হবে।
  • এই রেজেক্সও সাদা স্থানকে স্বাভাবিক করে তোলে। এটি ট্যাবগুলি, ক্যারেজের রিটার্ন এবং অন্যান্য প্রতিকূলতাকে সুন্দর, একক জায়গাতে মানচিত্র করে।

এটি ইউনিকোড চরিত্রের বৈশিষ্ট্য ব্যবহার করে, যা আপনি উইকিপিডিয়ায় আরও পড়তে পারেন


9

আমি এই উত্তরটি এখনও দেখিনি। শুধু একটি রেজেক্স ব্যবহার করুন; এটি শব্দের অক্ষর ( \w) এবং সংখ্যা অক্ষর ( \d) বাদে সমস্ত অক্ষর সরিয়ে দেয় , তারপরে একটি শ্বেত স্পেস অক্ষর ( \s):

import re
s = "string. With. Punctuation?" # Sample string 
out = re.sub(ur'[^\w\d\s]+', '', s)

1
\dএটি অনর্থক কারণ এটি একটি উপসেট \w
ব্লাশিং

সংখ্যা অক্ষর শব্দ অক্ষরের একটি উপসেট হিসাবে বিবেচনা করা হয়? আমি ভেবেছিলাম একটি ওয়ার্ড চরিত্র এমন কোনও চরিত্র যা সত্য শব্দ তৈরি করতে পারে, যেমন- a-zA-Z?
ব্লেয়ার 23

হ্যাঁ, রেজেক্সের একটি "শব্দ" এর মধ্যে বর্ণমালা, সংখ্যা এবং আন্ডারস্কোর রয়েছে। \wডকুমেন্টেশনের জন্য দয়া করে বিবরণটি দেখুন : docs.python.org/3/library/re.html
blhsing

8

পাইথন 3.5 এর জন্য এখানে এক-লাইনার রয়েছে:

import string
"l*ots! o(f. p@u)n[c}t]u[a'ti\"on#$^?/".translate(str.maketrans({a:None for a in string.punctuation}))

7

এটি সর্বোত্তম সমাধান নাও হতে পারে তবে এটি আমি এটি কীভাবে করেছি।

import string
f = lambda x: ''.join([i for i in x if i not in string.punctuation])

6

এখানে আমি লিখেছি একটি ফাংশন। এটি খুব দক্ষ নয়, তবে এটি সহজ এবং আপনি যে কোনও বিরামচিহ্নগুলি চান তা যুক্ত করতে বা মুছে ফেলতে পারেন:

def stripPunc(wordList):
    """Strips punctuation from list of words"""
    puncList = [".",";",":","!","?","/","\\",",","#","@","$","&",")","(","\""]
    for punc in puncList:
        for word in wordList:
            wordList=[word.replace(punc,'') for word in wordList]
    return wordList

5
import re
s = "string. With. Punctuation?" # Sample string 
out = re.sub(r'[^a-zA-Z0-9\s]', '', s)

দেখে মনে হচ্ছে এটি কেবলমাত্র ASCII অক্ষরের জন্য কাজ করবে।
avirr

5

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

table = str.maketrans({key: None for key in string.punctuation})

বনাম

table = str.maketrans('', '', string.punctuation)

প্লাস আমি সেট ব্যবহারের জন্য অন্য একটি পদ্ধতি যুক্ত করেছি, যেখানে আমি পুনরাবৃত্তির সংখ্যা হ্রাস করতে ছেদ ফাংশনের সুবিধা নিয়েছি।

এটি সম্পূর্ণ কোড:

import re, string, timeit

s = "string. With. Punctuation"


def test_set(s):
    exclude = set(string.punctuation)
    return ''.join(ch for ch in s if ch not in exclude)


def test_set2(s):
    _punctuation = set(string.punctuation)
    for punct in set(s).intersection(_punctuation):
        s = s.replace(punct, ' ')
    return ' '.join(s.split())


def test_re(s):  # From Vinko's solution, with fix.
    regex = re.compile('[%s]' % re.escape(string.punctuation))
    return regex.sub('', s)


def test_trans(s):
    table = str.maketrans({key: None for key in string.punctuation})
    return s.translate(table)


def test_trans2(s):
    table = str.maketrans('', '', string.punctuation)
    return(s.translate(table))


def test_repl(s):  # From S.Lott's solution
    for c in string.punctuation:
        s=s.replace(c,"")
    return s


print("sets      :",timeit.Timer('f(s)', 'from __main__ import s,test_set as f').timeit(1000000))
print("sets2      :",timeit.Timer('f(s)', 'from __main__ import s,test_set2 as f').timeit(1000000))
print("regex     :",timeit.Timer('f(s)', 'from __main__ import s,test_re as f').timeit(1000000))
print("translate :",timeit.Timer('f(s)', 'from __main__ import s,test_trans as f').timeit(1000000))
print("translate2 :",timeit.Timer('f(s)', 'from __main__ import s,test_trans2 as f').timeit(1000000))
print("replace   :",timeit.Timer('f(s)', 'from __main__ import s,test_repl as f').timeit(1000000))

এটি আমার ফলাফল:

sets      : 3.1830138750374317
sets2      : 2.189873124472797
regex     : 7.142953420989215
translate : 4.243278483860195
translate2 : 2.427158243022859
replace   : 4.579746678471565

4
>>> s = "string. With. Punctuation?"
>>> s = re.sub(r'[^\w\s]','',s)
>>> re.split(r'\s*', s)


['string', 'With', 'Punctuation']

2
আরও তথ্যের সাথে সম্পাদনা করুন। কেবল-কোড এবং "এটি চেষ্টা করুন" উত্তরগুলি নিরুৎসাহিত করা হয়েছে, কারণ সেগুলিতে কোনও অনুসন্ধানযোগ্য সামগ্রী নেই এবং কারও "কেন এটি চেষ্টা করা উচিত" তা ব্যাখ্যা করবেন না।
পরিতোষ

4

এখানে রেগেক্স ছাড়াই একটি সমাধান।

import string

input_text = "!where??and!!or$$then:)"
punctuation_replacer = string.maketrans(string.punctuation, ' '*len(string.punctuation))    
print ' '.join(input_text.translate(punctuation_replacer).split()).strip()

Output>> where and or then
  • বিরামচিহ্নগুলি স্থানগুলির সাথে প্রতিস্থাপন করে
  • একক স্পেস দিয়ে শব্দের মধ্যে একাধিক স্পেস প্রতিস্থাপন করুন
  • ট্রিলিং স্পেসগুলি সরান, যদি স্ট্রিপ সহ কোনও হয় ()

4

একটি ওয়ান-লাইনার খুব কঠোর ক্ষেত্রে না হতে পারে:

''.join([c for c in s if c.isalnum() or c.isspace()])

2
#FIRST METHOD
#Storing all punctuations in a variable    
punctuation='!?,.:;"\')(_-'
newstring='' #Creating empty string
word=raw_input("Enter string: ")
for i in word:
     if(i not in punctuation):
                  newstring+=i
print "The string without punctuation is",newstring

#SECOND METHOD
word=raw_input("Enter string: ")
punctuation='!?,.:;"\')(_-'
newstring=word.translate(None,punctuation)
print "The string without punctuation is",newstring


#Output for both methods
Enter string: hello! welcome -to_python(programming.language)??,
The string without punctuation is: hello welcome topythonprogramminglanguage


0

কেন আপনারা কেউ এটিকে ব্যবহার করেন না?

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

অত্যন্ত ধীর?


দ্রষ্টব্য যে এটি স্পেসগুলিও সরিয়ে ফেলবে।
জর্জি

0

ইউনিকোড বিবেচনা করে। পাইথন 3-এ কোড পরীক্ষা করা হয়েছে।

from unicodedata import category
text = 'hi, how are you?'
text_without_punc = ''.join(ch for ch in text if not category(ch).startswith('P'))

-1

পাইথন ব্যবহার করে পাঠ্য ফাইল থেকে স্টপ শব্দগুলি সরান

print('====THIS IS HOW TO REMOVE STOP WORS====')

with open('one.txt','r')as myFile:

    str1=myFile.read()

    stop_words ="not", "is", "it", "By","between","This","By","A","when","And","up","Then","was","by","It","If","can","an","he","This","or","And","a","i","it","am","at","on","in","of","to","is","so","too","my","the","and","but","are","very","here","even","from","them","then","than","this","that","though","be","But","these"

    myList=[]

    myList.extend(str1.split(" "))

    for i in myList:

        if i not in stop_words:

            print ("____________")

            print(i,end='\n')

-2

আমি এই জাতীয় একটি ফাংশন ব্যবহার করতে চাই:

def scrub(abc):
    while abc[-1] is in list(string.punctuation):
        abc=abc[:-1]
    while abc[0] is in list(string.punctuation):
        abc=abc[1:]
    return abc

1
এটি শুরু এবং শেষ থেকে অক্ষরগুলি কেটে ফেলছে; তার abc.strip(string.punctuation)পরিবর্তে ব্যবহার করুন। এটি মাঝখানে এই জাতীয় অক্ষরগুলি সরাবে না ।
মার্টিজন পিটারস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.