আমি কীভাবে প্রথম এবং শেষ ডাবল উদ্ধৃতি ফেলাতে পারি?


102

আমি এর থেকে ডাবল উক্তিগুলি ছাঁটাই করতে চাই:

string = '"" " " ""\\1" " "" ""'

অর্জন:

string = '" " " ""\\1" " "" "'

আমি ব্যবহার করার চেষ্টা rstrip, lstripএবং strip('[^\"]|[\"$]')কিন্তু এটা কাজ করে নি।

কিভাবে আমি এটি করতে পারব?


5
সঠিক উত্তর নীচে দেওয়া হল। আপনার সাথে যোগাযোগের ক্ষেত্রে strip, দয়া করে নোট করুন যে) ক) এই পদ্ধতিটি তার আর্গুমেন্ট হিসাবে কোনও রেজেক্স গ্রহণ করে না, খ) আপনার সরবরাহিত রেজেক্সটি কোনওভাবেই কাজ করবে না এবং গ) এই পদ্ধতিটি কেবল একটি নয়, সমস্ত সংলগ্ন চরিত্রগুলি সরিয়ে দেয় so আপনি দুটি ডাবল উদ্ধৃতি দিয়ে হারাতে হবে .strip('"')
টিম পিটজ্যাকার

উত্তর:


188

আপনি যে উদ্ধৃতিগুলি ছাঁটাতে চান তা যদি সর্বদা "প্রথম এবং শেষ" হিসাবে আপনি বলেছিলেন, তবে আপনি কেবল ব্যবহার করতে পারেন:

string = string[1:-1]


নীচের একটি নিরাপদ!
আর ক্লেন

93

আপনি যদি ধরে নিতে না পারেন যে আপনার প্রসারণ করা সমস্ত স্ট্রিংয়ের ডাবল উদ্ধৃতি রয়েছে আপনি এই জাতীয় কিছু ব্যবহার করতে পারেন:

if string.startswith('"') and string.endswith('"'):
    string = string[1:-1]

সম্পাদনা:

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


1
তাহলে টিতে ' "' আছে (শুধু একটা ডাবল উদ্ধৃতি) এই একক অক্ষর মুছে ফেলা হবে আমার মনে হয় সম্ভবত কি পছন্দসই হয়, সম্ভবত Walapa শুধুমাত্র ডাবল উদ্ধৃতি সরাতে চেয়েছিলেন যদি এটি মিলেছে ছিল
Dbn

44

প্রথম এবং শেষ অক্ষরগুলি সরাতে, এবং প্রতিটি ক্ষেত্রেই অপসারণটি কেবল তখনই করা হয় যদি প্রশ্নে থাকা অক্ষরটি দ্বিগুণ উদ্ধৃতি হয়:

import re

s = re.sub(r'^"|"$', '', s)

মনে রাখবেন যে আরআর প্যাটার্ন আপনি দিয়েছেন তার থেকে আলাদা এবং অপারেশনটি sub("বিকল্প") খালি প্রতিস্থাপন স্ট্রিং সহ ( stripএকটি স্ট্রিং পদ্ধতি তবে আপনার প্রয়োজনীয়তা থেকে বেশ আলাদা কিছু করে, যেমন অন্যান্য উত্তরগুলি নির্দেশ করেছে)।


4
এখানে একটি আরई ব্যবহার করা ওভারকিল আইএমএইচও। আমি সমাধানটি পছন্দ করি startsWith
পাইহন্তেজি

19
প্রচুর পাইথনিস্টের আরইএস-এর অনুরূপ প্রতিক্রিয়া রয়েছে যা সত্যই অযৌক্তিক - আরইএসগুলি বেশ দ্রুত। এছাড়াও, সমাধান যেমন আপনি "পছন্দ করেন", পোস্ট হিসাবে সম্পূর্ণ আলাদাভাবে কিছু করে (প্রথম এবং শেষের চরটি কেবল দুটো -কোট - যা অপের চশমা থেকে পৃথক বলে মনে হয়) সরিয়ে দেয় - যদি শীর্ষস্থানীয় এবং অনুসরণযোগ্য উদ্ধৃতি (উপস্থিত থাকে) স্বাধীনভাবে অপসারণ করা প্রয়োজন, সমাধান একটি 4 বিবৃতি, 2-কন্ডিশন ব্লক হয়ে - এখন যে 'র একটি একক, দ্রুত একই কাজের জন্য অভিব্যক্তি তুলনায় Overkill -!)
অ্যালেক্স Martelli

44

গুরুত্বপূর্ণ: আমি একক বা ডাবল উদ্ধৃতি ফালা প্রশ্ন / উত্তর প্রসারিত করছি। এবং আমি প্রশ্নের ব্যাখ্যা করে বোঝাতে চাইছি যে স্ট্রিপটি সম্পাদন করার জন্য দুটি উদ্ধৃতি অবশ্যই উপস্থিত থাকতে হবে এবং মিলবে। অন্যথায়, স্ট্রিংটি অপরিবর্তিত অবস্থায় ফিরে আসে।

একটি স্ট্রিং প্রতিনিধিত্ব "সনাক্তকরণ" করতে, এর চারপাশে একক বা ডাবল উদ্ধৃতি থাকতে পারে (এটি @ টিগ্রির উত্তরের একটি এক্সটেনশন):

def dequote(s):
    """
    If a string has single or double quotes around it, remove them.
    Make sure the pair of quotes match.
    If a matching pair of quotes is not found, return the string unchanged.
    """
    if (s[0] == s[-1]) and s.startswith(("'", '"')):
        return s[1:-1]
    return s

ব্যাখ্যা:

startswithএকটি বিকল্প নিতে পারে, বেশ কয়েকটি বিকল্পের যে কোনওটির সাথে মেলে। দ্বিগুন প্রথম বন্ধনী জন্য কারণ ((এবং ))যে আমরা এক প্যারামিটার পাস তাই ("'", '"')করতে startswith()উপসর্গ বদলে দুটি প্যারামিটার অনুমতি নির্দিষ্ট করতে, "'"এবং '"', যা একটি উপসর্গ এবং (অবৈধ) অবস্থান শুরু হিসেবে ব্যাখ্যা করা হবে।

s[-1] স্ট্রিংয়ের শেষ অক্ষর।

পরীক্ষামূলক:

print( dequote("\"he\"l'lo\"") )
print( dequote("'he\"l'lo'") )
print( dequote("he\"l'lo") )
print( dequote("'he\"l'lo\"") )

=>

he"l'lo
he"l'lo
he"l'lo
'he"l'lo"

(আমার জন্য, রেজেক্স এক্সপ্রেশনগুলি পড়ার জন্য স্পষ্ট নয়, তাই আমি @ অ্যালেক্সের উত্তরটি প্রসারিত করার চেষ্টা করিনি))


1
যদি আপনি প্রথমে পরীক্ষা করেন যে প্রথম এবং শেষের অক্ষরগুলি একই হয় তবে আপনাকে কেবল প্রথম চরটি উদ্ধৃতি হিসাবে চিহ্নিত করতে হবে: Def স্ট্রিপ_আইফ_কোটেড (নাম): যদি নাম [0] == নাম [-1] এবং নাম [0] ] ইন ("'",' "'): ফেরতের নাম [1: -1]
টমঅনটাইম

@ টমঅনটাইম: আপনি ঠিক বলেছেন, এটি একটি ভাল অপ্টিমাইজেশন। আমি এটি প্রয়োগ করেছি।
টুলমেকারস্টেভ

4
আমি 2 টি অক্ষর বা তার চেয়ে কম স্ট্রিংগুলি পরিচালনা করার পরামর্শ দিই। এই মুহুর্তে এই ফাংশনটি দৈর্ঘ্যের একটি স্ট্রিংয়ের জন্য সীমানা ব্যতিক্রমের বাইরে একটি সূচক ছুঁড়ে ফেলতে পারে Additionally অতিরিক্তভাবে, আপনি 1 টি অক্ষরের দীর্ঘ একটি স্ট্রিং থেকে একটি উদ্ধৃতি ছাঁটাই করতে পারেন। আপনি কোনও প্রহরী len(s) >= 2, বা অনুরূপ কিছু যুক্ত করতে পারেন ।
BrennanR


9

প্রায় শেষ. Http://docs.python.org/library/stdtypes.html?hightlight=strip#str.strip থেকে উদ্ধৃতি দেওয়া হচ্ছে

অক্ষর আর্গুমেন্ট একটি স্ট্রিং যা মুছে ফেলার জন্য অক্ষরের সেট নির্দিষ্ট করে।

[...]

অক্ষর যুক্তি একটি উপসর্গ বা প্রত্যয় নয়; বরং এর মানগুলির সমস্ত সংমিশ্রণগুলি ছিনিয়ে নেওয়া হয়:

সুতরাং যুক্তি একটি regexp নয়।

>>> string = '"" " " ""\\1" " "" ""'
>>> string.strip('"')
' " " ""\\1" " "" '
>>> 

দ্রষ্টব্য, আপনি অনুরোধ করেছেন এটি ঠিক এটি নয়, কারণ এটি স্ট্রিংয়ের উভয় প্রান্ত থেকে একাধিক উক্তি খায়!


পুরোপুরি আমার উদ্দেশ্য পরিবেশন! অনেক ধন্যবাদ.
হর্ষ বর্ধন

4

আপনি যদি নিশ্চিত হন যে "শুরুতে এবং শেষে" রয়েছে যা আপনি মুছে ফেলতে চান, কেবলমাত্র:

string = string[1:len(string)-1]

অথবা

string = string[1:-1]

2

শুরু থেকে একটি স্ট্রিং থেকে নির্ধারিত স্ট্রিংটি সরান।

s = '""Hello World""'
s.strip('""')

> 'Hello World'

1

আমার কাছে এমন কিছু কোড রয়েছে যার একক বা ডাবল উদ্ধৃতিগুলি ছাঁটাই করতে হবে এবং আমি এটিকে কেবল অ্যাস্টলাইটাল_ইভাল করতে পারি না।

if len(arg) > 1 and arg[0] in ('"\'') and arg[-1] == arg[0]:
    arg = arg[1:-1]

এটি সরঞ্জাম নির্মাতাস্টভের উত্তরের মতো, তবে এটি 0 দৈর্ঘ্যের স্ট্রিংগুলিকে মঞ্জুরি দেয় এবং একক অক্ষরকে "খালি স্ট্রিংয়ে রূপান্তরিত করে না ।


0

আপনার উদাহরণে আপনি স্ট্রিপ ব্যবহার করতে পারেন তবে আপনাকে স্থান সরবরাহ করতে হবে

string = '"" " " ""\\1" " "" ""'
string.strip('" ')  # output '\\1'

দ্রষ্টব্য আউটপুট in 'স্ট্রিং আউটপুট জন্য মান পাইথন উদ্ধৃতি

আপনার ভেরিয়েবলের মান '\\ 1'


0

ফাংশনের নীচে খালি স্পেসগুলি ছাঁটাই করবে এবং উদ্ধৃতিগুলি ছাড়াই স্ট্রিংগুলি ফিরিয়ে দেবে। যদি কোনও উদ্ধৃতি না থাকে তবে এটি একই স্ট্রিংটি ফিরবে (স্ট্রিপড)

def removeQuote(str):
str = str.strip()
if re.search("^[\'\"].*[\'\"]$",str):
    str = str[1:-1]
    print("Removed Quotes",str)
else:
    print("Same String",str)
return str


-1

আপনার স্ট্রিংয়ে প্রথম এবং শেষের অবস্থানটি সন্ধান করুন

>>> s = '"" " " ""\\1" " "" ""'
>>> l = s.find('"')
>>> r = s.rfind('"')

>>> s[l+1:r]
'" " " ""\\1" " "" "'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.