অজগরে একটি নির্দিষ্ট চরিত্রের পরে সমস্ত অক্ষর কীভাবে মুছবেন?


148

আমার একটা স্ট্রিং আছে একটি নির্দিষ্ট চরিত্রের পরে আমি কীভাবে সমস্ত পাঠ সরিয়ে ফেলব? ( এই ক্ষেত্রে... )
পরবর্তী পাঠ্যটি ...পরিবর্তিত হবে তাই আমি নির্দিষ্ট বর্ণনার পরে সমস্ত অক্ষর মুছে ফেলতে চাই।


6
আপনি যদি নিশ্চিত হন না যে এটি বোধগম্য হয় তবে আপনি কি করতে চান তার নির্দিষ্ট উদাহরণ সরবরাহ করতে আপনার প্রশ্নটি আপডেট করুন।
এস .লট

উত্তর:


259

আপনার বিভাজকের উপর একবারে বিভক্ত করুন এবং প্রথম টুকরোটি নিন:

sep = '...'
rest = text.split(sep, 1)[0]

বিভাজক উপস্থিত না থাকলে কী হবে তা আপনি বলেননি। এটি এবং অ্যালেক্সের সমাধান উভয়ই সেই ক্ষেত্রে পুরো স্ট্রিংটি ফিরিয়ে দেবে।


অনুরোধটি হ'ল বিভক্তকারীটির পরে সমস্ত পাঠ্য অপসারণ করা, সেই পাঠ্যটি "পান" না, সুতরাং আমার মনে হয় আপনার অন্যথায় দুর্দান্ত সমাধানে আপনি [0] নয়, [-1] চান।
অ্যালেক্স মার্তেলি

পুরোপুরি ধন্যবাদ পরিশ্রম করেছি, যেহেতু আমি নিশ্চিত যে আয়মান ও অ্যালেক্সও সেভাবে কাজ করেছে, তাই আপনাকে সকলকে ধন্যবাদ।
সোলিহুল 22

5
স্ট্রিংয়ের শেষে থেকে কোনও অক্ষর দ্বারা বিভক্ত হওয়া প্রয়োজন হলে আরএসপ্লিট () ব্যবহার করুন।
স্যামুয়েল

rsplit () আসলে প্রশ্নের উত্তর যদি বিভাজক একাধিক ঘটনার হয়
Nate

94

আপনার বিভাজকটি '...' হিসাবে ধরে নেওয়া, তবে এটি কোনও স্ট্রিং হতে পারে।

text = 'some string... this part will be removed.'
head, sep, tail = text.partition('...')

>>> print head
some string

বিভাজকটি পাওয়া না গেলে, headসমস্ত মূল স্ট্রিং থাকবে।

পার্টিশন ফাংশনটি পাইথন 2.5 তে যুক্ত করা হয়েছিল।

পার্টিশন (...) এস পার্টিশন (সেপ) -> (মাথা, সেপ, লেজ)

Searches for the separator sep in S, and returns the part before it,
the separator itself, and the part after it.  If the separator is not
found, returns S and two empty strings.

তবুও আরও একটি দুর্দান্ত সমাধান - আমরা কি টুডব্লডিটিআই লঙ্ঘন করছি? -) যাচাই করার জন্য হয়তো সময়োপযোগী মূল্য সাধ্যের জন্য ...
অ্যালেক্স

9
। পার্টিশনটি জিতেছে - লুপ প্রতি 0.756 ইউরসি, স্প্লিটের জন্য 1.13 বনাম (মন্তব্য বিন্যাসটি আমাকে সঠিক পরীক্ষা প্রদর্শন করতে দেয় না, তবে আমি @ আইমানের পাঠ্য এবং বিভাজকটি ব্যবহার করছি) - সুতরাং, @ আইমানের উত্তরের জন্য +1 !
অ্যালেক্স মার্টেলি

1
এবং বিটিডব্লিউ, সম্পূর্ণতার জন্য, আরই-ভিত্তিক সমাধানটি 2.54 ইউজেক, অর্থাত্ আয়মান বা @ নেডের তুলনায় ধীরে ধীরে ধীর।
অ্যালেক্স মার্তেলি

আপনি 2.5 জমি থাকলে পার্টিশনটি জিতবে :) আমাদের জন্য 2.4 র মধ্যে আটকে থাকা সফলদের জন্য, আমাদের বিভক্তির তুলনামূলকভাবে হিমশিমতি নিয়ে বাঁচতে হবে।
গ্রেগ লিন্ড

উদাহরণ সত্যই সহায়ক।
মোঃ সাব্বির আহমেদ

18

আপনি যদি কোনও স্ট্রিংয়ের মধ্যে বিভাজনের শেষ ঘটনাটির পরে সমস্ত কিছু সরিয়ে দিতে চান তবে আমি এটি ভালভাবে দেখতে পাই:

<separator>.join(string_to_split.split(<separator>)[:-1])

উদাহরণস্বরূপ, যদি string_to_splitএমন কোনও পথ থাকে root/location/child/too_far.exeএবং আপনি কেবল ফোল্ডার পাথ চান তবে আপনি বিভাজন করতে পারেন "/".join(string_to_split.split("/")[:-1])এবং আপনি পাবেন root/location/child


1
অতিরিক্তভাবে, আপনি যে -১ কে কোনও সূচীতে পরিবর্তন করতে পারেন যেখানে আপনি পাঠ্যটি ফেলেছেন।
theannouncer

10

আরই ছাড়া (যা আমি ধরে নিই যে আপনি যা চান):

def remafterellipsis(text):
  where_ellipsis = text.find('...')
  if where_ellipsis == -1:
    return text
  return text[:where_ellipsis + 3]

বা, একটি আরই সঙ্গে:

import re

def remwithre(text, there=re.compile(re.escape('...')+'.*')):
  return there.sub('', text)

কোয়ার্গ হিসাবে সেপ = '...' ব্যবহার করতে পারে এবং 3 কে সামান্য আরও ভবিষ্যত-প্রমাণ করার জন্য হার্ড-কোডিংয়ের পরিবর্তে লেন (সেপ) ব্যবহার করতে পারে।
সিডলারি

হ্যাঁ, তবে তারপরে আপনাকে প্রতিটি কলের আরইপি পুনরায় সংকলন করতে হবে, তাই পারফরম্যান্স আরই সমাধানের জন্য ভোগে (অ আরইউ সমাধানের ক্ষেত্রে কোনও বাস্তব পার্থক্য নেই)। কিছু সাধারণতা নিখরচায়, কিছু না ... ;-)
অ্যালেক্স মার্তেলি

@ অ্যালেক্স - সমাধানগুলি পরীক্ষার জন্য ধন্যবাদ!
আয়মান হৌরিহ

2

পদ্ধতিটি অনুসন্ধান করে একটি অক্ষরে অক্ষরের অবস্থান ফিরে আসবে। তারপরে, আপনি যদি চরিত্র থেকে প্রতিটি জিনিস মুছতে চান তবে এটি করুন:

mystring = "123⋯567"
mystring[ 0 : mystring.index("⋯")]

>> '123'

আপনি যদি চরিত্রটি রাখতে চান তবে অক্ষরের অবস্থানের সাথে 1 যুক্ত করুন।


1
import re
test = "This is a test...we should not be able to see this"
res = re.sub(r'\.\.\..*',"",test)
print(res)

আউটপুট: "এটি একটি পরীক্ষা"


দয়া করে ব্যাখ্যা করুন
lone_coder

1

একটি ফাইল থেকে:

import re
sep = '...'

with open("requirements.txt") as file_in:
    lines = []
    for line in file_in:
        res = line.split(sep, 1)[0]
        print(res)

0

পুনরায় ব্যবহারের আর একটি সহজ উপায় হবে

import re, clr

text = 'some string... this part will be removed.'

text= re.search(r'(\A.*)\.\.\..+',url,re.DOTALL|re.IGNORECASE).group(1)

// text = some string
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.