আমি প্রতিটি শব্দে কোনও চরিত্রের প্রথম উপস্থিতিটি কীভাবে প্রতিস্থাপন করতে পারি?


44

আমি প্রতিটি শব্দে কোনও চরিত্রের প্রথম উপস্থিতিটি কীভাবে প্রতিস্থাপন করতে পারি?

বলুন আমার কাছে এই স্ট্রিং রয়েছে:

hello @jon i am @@here or @@@there and want some@thing in '@here"
#     ^         ^^        ^^^                   ^          ^ 

এবং আমি @প্রতিটি শব্দের প্রথমটি মুছে ফেলতে চাই , যাতে আমার চূড়ান্ত স্ট্রিংটি শেষ হয়ে যায়:

hello jon i am @here or @@there and want something in 'here
#     ^        ^        ^^                   ^         ^

কেবলমাত্র স্পষ্টতার জন্য, "@" অক্ষর সর্বদা প্রতিটি শব্দে একসাথে উপস্থিত হয় তবে শব্দের শুরুতে বা অন্যান্য অক্ষরের মধ্যে হতে পারে।

আমি "@" চরিত্রটি মুছে ফেলতে সক্ষম হয়েছি যদি ডিলিট সাবস্ট্রিং-এ একবার দেখা যায় তবে আমি একবার রেজিেক্সের বৈচিত্রটি ব্যবহার করে এটি পাই, তবে পাইথনটিতে পরপর দু'বার নয় , যা নেতিবাচক বর্ণবাদী এবং নেতিবাচক বর্ণনহীন ব্যবহার করে:

@(?!@)(?<!@@)

আউটপুট দেখুন:

>>> s = "hello @jon i am @@here or @@@there and want some@thing in '@here"
>>> re.sub(r'@(?!@)(?<!@@)', '', s)
"hello jon i am @@here or @@@there and want something in 'here"

সুতরাং পরবর্তী পদক্ষেপটি হ'ল "@" প্রতিস্থাপন করা যখন এটি একাধিকবার ঘটে। এটি s.replace('@@', '@')"@" যেখানেই আবার ঘটে সেখানে থেকে সরানোর মাধ্যমে এটি সহজ ।

যাইহোক, আমি অবাক: একটি শট এই প্রতিস্থাপন করার উপায় আছে?


1
আপনার কি কঠোরভাবে রেইগেক্স উত্তর দরকার?
সায়ানদীপ দত্ত

@ সন্দ্বীপদত্ত নীতিগতভাবে, হ্যাঁ, তবে আমি রেজেক্স ছাড়াই এটি করার অন্যান্য উপায়গুলি দেখতেও আগ্রহী
হব

কেবল তা নিশ্চিত করার জন্য, এখানে স্ট্রিং থাকতে পারে: ধারাবাহিকভাবে @Hello@Thereকোথায় @হবে না?
জেভিডিভি

1
@ জেভিডিভি না, এরকম মামলা হবে না।
ফেডরকিই 'এসও ক্ষতিগ্রস্থ হওয়া বন্ধ করুন'

উত্তর:


51

আমি নিম্নলিখিত প্যাটার্নে একটি রেজেক্স প্রতিস্থাপন করব:

@(@*)

এবং তারপরে কেবল প্রথম ক্যাপচার গ্রুপটি প্রতিস্থাপন করুন, যা সমস্ত ক্রমাগত @ চিহ্ন, বিয়োগ একটি।

এটি @প্রতিটি শব্দের শুরুতে প্রতিটি ঘটনাকে ক্যাপচার করতে হবে, স্ট্রিংয়ের শুরুতে, মাঝখানে বা শেষে সেই শব্দটি হওয়া উচিত।

inp = "hello @jon i am @@here or @@@there and want some@thing in '@here"
out = re.sub(r"@(@*)", '\\1', inp)
print(out)

এই মুদ্রণ:

hello jon i am @here or @@there and want something in 'here

35

replace('@', '', 1)জেনারেটর এক্সপ্রেশন ব্যবহার সম্পর্কে কীভাবে ?

string = 'hello @jon i am @@here or @@@there and want some@thing in "@here"'
result = ' '.join(s.replace('@', '', 1) for s in string.split(' '))

# output: hello jon i am @here or @@there and want something in "here"

এর মান মান 1হ'ল al চ্ছিক countযুক্তি।

str.replace(old, new[, count])

নতুন দ্বারা প্রতিস্থাপিত পুরানো স্ট্রিংয়ের সমস্ত উপস্থিতি সহ স্ট্রিংয়ের একটি অনুলিপি ফেরান । যদি alচ্ছিক আর্গুমেন্ট গণনা দেওয়া হয় তবে কেবল প্রথম গণনার উপস্থিতি প্রতিস্থাপন করা হবে।


5
এটা একটা চালাক কৌশল! যেহেতু প্রতিস্থাপনের তৃতীয় প্যারামিটার হ'ল replace(search, replace, max_matches), এটি প্রতিটি শব্দের মধ্যে প্রথমটি প্রতিস্থাপন করে।
ফেডরকিই 'এসও ক্ষতিগ্রস্থ হওয়া বন্ধ করুন'

1
@ ফেডরকিইস্টোফর্মিং 'হ্যাঁ, এটি বলা হয়ে গেছে count, আমি ডক্স থেকে বিবরণ যুক্ত করেছি।
গাই

2
এই পার্শ্ব প্রতিক্রিয়াটি দেখুন: আপনার যদি বেশ কয়েকটি সাদা স্পেস ('') থাকে তবে সেগুলি হারিয়ে যাবে এবং একটি একক দ্বারা প্রতিস্থাপিত হবে ''।
মার্ক ভ্যানহোমিসসেন

4

আপনি এটির re.subমতো ব্যবহার করতে পারেন :

import re

s = "hello @jon i am @@here or @@@there and want some@thing in '@here"
s = re.sub('@(\w)', r'\1', s)
print(s)

ফলস্বরূপ:

"hello jon i am @here or @@there and want something in 'here"

এবং এখানে ধারণার একটি প্রমাণ:

>>> import re
>>> s = "hello @jon i am @@here or @@@there and want some@thing in '@here"
>>> re.sub('@(\w)', r'\1', s)
"hello jon i am @here or @@there and want something in 'here"
>>> 

2

যদি কেবল শেষ চরটি হয় @এবং আপনি এটি অপসারণ করতে চান না, বা আপনার নির্দিষ্ট অনুমতিপ্রাপ্ত অক্ষর রয়েছে তবে কী হবে তা নিয়ে চিন্তাভাবনা করছিলেন :

>>> ' '.join([s_.replace('@', '', 1) if s_[0] in ["'", "@"] else s_ for s_ in s.split()])
"hello jon i am @here or @@there and want some@thing in 'here"

অথবা, ধরুন আপনি @কেবলমাত্র এটি প্রথম এন অক্ষরগুলিতে থাকলে প্রতিস্থাপন করতে চান

>>> ' '.join([s_.replace('@', '', 1) if s_.find('@') in range(2) else s_ for s_ in s.split()])
"hello jon i am @here or @@there and want some@thing in 'here"


1
# Python3 program to remove the @ from String


def ExceptAtTheRate(string):
    # Split the String based on the space
    arrOfStr = string.split()

    # String to store the resultant String
    res = ""

    # Traverse the words and
    # remove the first @ From every word.
    for a in arrOfStr:
        if(a[0]=='@'):
            res += a[1:len(a)] + " "
        else:
            res += a[0:len(a)] + " "

    return res


# Driver code
string = "hello @jon i am @@here or @@@there and want some@thing in '@here"

print(ExceptAtTheRate(string))

আউটপুট:

এখানে চিত্র বর্ণনা লিখুন


ধন্যবাদ! লক্ষ্য করুন @ মধ্যে কিছু @ জিনিস এবং '@here এছাড়াও, আমার প্রয়োজনীয়তা হিসাবে অপসারণ করা উচিত।
ফেডরকিই 'ক্ষতি বন্ধ করুন'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.