আমার কাছে নিম্নলিখিত কোড রয়েছে:
url = 'abcdc.com'
print(url.strip('.com'))
আমি আশা করেছিলাম: abcdc
আমি পেয়েছি: abcd
এখন আমি করি
url.rsplit('.com', 1)
একটি ভাল উপায় আছে কি?
আমার কাছে নিম্নলিখিত কোড রয়েছে:
url = 'abcdc.com'
print(url.strip('.com'))
আমি আশা করেছিলাম: abcdc
আমি পেয়েছি: abcd
এখন আমি করি
url.rsplit('.com', 1)
একটি ভাল উপায় আছে কি?
উত্তর:
strip
"এই সাবস্ট্রিংটি সরান" এর অর্থ এই নয়। অক্ষরের একটি সেট হিসাবে x.strip(y)
গণ্য করে y
এবং এর সেট থেকে যে কোনও অক্ষর সেটির প্রান্ত থেকে ফেলা করে x
।
পরিবর্তে, আপনি ব্যবহার endswith
এবং কাটা করতে পারে :
url = 'abcdc.com'
if url.endswith('.com'):
url = url[:-4]
বা নিয়মিত এক্সপ্রেশন ব্যবহার করে :
import re
url = 'abcdc.com'
url = re.sub('\.com$', '', url)
url = url[:-4] if any(url.endswith(x) for x in ('.com','.net')) else url
EXAMLPLE.COM
ডোমেনের নামগুলি লিখি তবে সংবেদনশীল নয়। (এটি রেজেজেক্স সমাধানের পক্ষে একটি ভোট)
rsplit()
সমাধানটির মতো একই আচরণ endswith()
হয় না তবে কোথাও মাঝখানে থাকে। উদাহরণস্বরূপ: "www.comeandsee.com".rsplit(".com",1)[0] == "www.comeandsee"
তবে"www.comeandsee.net".rsplit(".com",1)[0] == "www"
s[:-n]
একটি সতর্কতা রয়েছে: কারণ n = 0
এটি শেষ শূন্য অক্ষরের সাথে কাটা কাটাটি দিয়ে স্ট্রিংটি ফিরিয়ে দেয় না, পরিবর্তে খালি স্ট্রিংটি।
আপনি যদি নিশ্চিত হন যে স্ট্রিংটি কেবল শেষে দেখা যায়, তবে সবচেয়ে সহজ উপায় হ'ল 'প্রতিস্থাপন' ব্যবহার করা:
url = 'abcdc.com'
print(url.replace('.com',''))
www.computerhope.com
। সাথে একটি চেক করুন endswith()
এবং ভাল হতে হবে।
def strip_end(text, suffix):
if not text.endswith(suffix):
return text
return text[:len(text)-len(suffix)]
return text[:-len(suffix)]
যেহেতু মনে হচ্ছে এখনও কেউ এটিকে নির্দেশ করেনি:
url = "www.example.com"
new_url = url[:url.rfind(".")]
split()
কোনও নতুন তালিকা অবজেক্ট তৈরি না হওয়ায় এটি ব্যবহারের পদ্ধতিগুলির চেয়ে আরও দক্ষ হওয়া উচিত এবং এই দ্রবণটি বেশ কয়েকটি বিন্দুর সাথে স্ট্রিংয়ের জন্য কাজ করে।
আপনার ইউআরএল সম্পর্কে আপনি কী জানেন এবং ঠিক কী করার চেষ্টা করছেন তার উপর নির্ভর করে। যদি আপনি জানেন যে এটি সর্বদা '.com' (বা '। নেট' বা '.org') এ শেষ হবে
url=url[:-4]
দ্রুততম সমাধান। যদি এটি আরও সাধারণ ইউআরএল হয় তবে অজগর নিয়ে আসা urlparse গ্রন্থাগারটি সন্ধান করা আপনি আরও ভাল।
আপনি অন্যদিকে যদি আপনি কেবল ফাইনালের পরে সবকিছু মুছে ফেলতে চান ''। একটি স্ট্রিং তারপর
url.rsplit('.',1)[0]
কাজ করবে. অথবা আপনি যদি চান তবে প্রথমে কিছু চান ''। তারপরে চেষ্টা করুন
url.split('.',1)[0]
এক লাইনে:
text if not text.endswith(suffix) or len(suffix) == 0 else text[:-len(suffix)]
কীভাবে url[:-4]
?
ইউআরএলগুলির জন্য (যেমনটি প্রদত্ত উদাহরণের দ্বারা বিষয়টির একটি অংশ বলে মনে হচ্ছে), কেউ এর মতো কিছু করতে পারে:
import os
url = 'http://www.stackoverflow.com'
name,ext = os.path.splitext(url)
print (name, ext)
#Or:
ext = '.'+url.split('.')[-1]
name = url[:-len(ext)]
print (name, ext)
উভয়ই আউটপুট দেবে:
('http://www.stackoverflow', '.com')
আপনার str.endswith(suffix)
যদি কেবল ".com", বা নির্দিষ্ট কিছু বিভক্ত করতে হয় তবে এটির সাথেও মিলিত হতে পারে ।
url.rsplit ('। com', 1)
বেশ সঠিক নয়।
আপনার যা লিখতে হবে তা হ'ল
url.rsplit('.com', 1)[0]
, এবং এটি দেখতে বেশ সংক্ষিপ্ত আইএমএইচও।
তবে, আমার ব্যক্তিগত পছন্দটি এই বিকল্প কারণ এটি কেবলমাত্র একটি প্যারামিটার ব্যবহার করে:
url.rpartition('.com')[0]
শুরু করে Python 3.9
, আপনি removesuffix
পরিবর্তে ব্যবহার করতে পারেন :
'abcdc.com'.removesuffix('.com')
# 'abcdc'
আপনার যদি কোনও স্ট্রিংয়ের কিছু প্রান্ত উপস্থিত থাকে তবে তা অন্যথায় কিছু করবেন না। আমার সেরা সমাধান। আপনি সম্ভবত প্রথম 2 টি প্রয়োগের একটি ব্যবহার করতে চাইবেন তবে আমি সম্পূর্ণতার জন্য তৃতীয়টি অন্তর্ভুক্ত করেছি।
ধ্রুব প্রত্যয় জন্য:
def remove_suffix(v, s):
return v[:-len(s) if v.endswith(s) else v
remove_suffix("abc.com", ".com") == 'abc'
remove_suffix("abc", ".com") == 'abc'
একটি রেজেক্সের জন্য:
def remove_suffix_compile(suffix_pattern):
r = re.compile(f"(.*?)({suffix_pattern})?$")
return lambda v: r.match(v)[1]
remove_domain = remove_suffix_compile(r"\.[a-zA-Z0-9]{3,}")
remove_domain("abc.com") == "abc"
remove_domain("sub.abc.net") == "sub.abc"
remove_domain("abc.") == "abc."
remove_domain("abc") == "abc"
ধ্রুবক প্রত্যয় সংগ্রহের জন্য বিপুল সংখ্যক কলগুলির জন্য asyptotically দ্রুততম উপায়:
def remove_suffix_preprocess(*suffixes):
suffixes = set(suffixes)
try:
suffixes.remove('')
except KeyError:
pass
def helper(suffixes, pos):
if len(suffixes) == 1:
suf = suffixes[0]
l = -len(suf)
ls = slice(0, l)
return lambda v: v[ls] if v.endswith(suf) else v
si = iter(suffixes)
ml = len(next(si))
exact = False
for suf in si:
l = len(suf)
if -l == pos:
exact = True
else:
ml = min(len(suf), ml)
ml = -ml
suffix_dict = {}
for suf in suffixes:
sub = suf[ml:pos]
if sub in suffix_dict:
suffix_dict[sub].append(suf)
else:
suffix_dict[sub] = [suf]
if exact:
del suffix_dict['']
for key in suffix_dict:
suffix_dict[key] = helper([s[:pos] for s in suffix_dict[key]], None)
return lambda v: suffix_dict.get(v[ml:pos], lambda v: v)(v[:pos])
else:
for key in suffix_dict:
suffix_dict[key] = helper(suffix_dict[key], ml)
return lambda v: suffix_dict.get(v[ml:pos], lambda v: v)(v)
return helper(tuple(suffixes), None)
domain_remove = remove_suffix_preprocess(".com", ".net", ".edu", ".uk", '.tv', '.co.uk', '.org.uk')
চূড়ান্ত একটি সম্ভবত পাইপিতে সিপাইথনে উল্লেখযোগ্যভাবে দ্রুত। কার্যত সমস্ত ক্ষেত্রেই রেজেক্স বৈকল্পিক সম্ভবত এর চেয়ে দ্রুততর হতে পারে যে কমপক্ষে সিপাইথনে রিজেক্স হিসাবে সহজেই প্রতিনিধিত্ব করা যায় না এমন সম্ভাব্য প্রত্যয়গুলির বৃহত অভিধানগুলি জড়িত না করে।
পিআইপি-তে রিজেক্স ভেরিয়েন্টটি অবশ্যই বৃহত সংখ্যক কল বা লম্বা স্ট্রিংয়ের জন্য প্রায় ধীরে ধীরে ধীরে ধীরে ধীরে module
সিপাইথনে তবে সত্য যে আপনার রেগেক্সের জন্য চলমান সি কোডটি প্রায় সমস্ত ক্ষেত্রেই প্রত্যয় সংগ্রহ সংস্করণটির অ্যালগরিদমিক সুবিধার সাথে প্রায় অবশ্যই উপায়গুলির তুলনা করে।
import re
def rm_suffix(url = 'abcdc.com', suffix='\.com'):
return(re.sub(suffix+'$', '', url))
আমি এই উত্তরটি এটির সবচেয়ে সার্থক উপায় হিসাবে পুনরাবৃত্তি করতে চাই। অবশ্যই, নিম্নলিখিতগুলিতে কম সিপিইউ সময় লাগবে:
def rm_dotcom(url = 'abcdc.com'):
return(url[:-4] if url.endswith('.com') else url)
তবে সিপিইউ যদি বোতল ঘাড় হয় তবে পাইথনে কেন লিখবেন?
সিপিইউ কখন কীভাবে বোতল ঘাড় হয়? ড্রাইভারদের মধ্যে, সম্ভবত।
নিয়মিত এক্সপ্রেশন ব্যবহারের সুবিধাগুলি হ'ল কোড পুনরায় ব্যবহারযোগ্যতা। আপনি যদি পরবর্তী '.me' অপসারণ করতে চান তবে এর মধ্যে কেবল তিনটি অক্ষর রয়েছে?
একই কোডটি কৌশলটি করবে:
>>> rm_sub('abcdc.me','.me')
'abcdc'
আমার ক্ষেত্রে আমার একটি ব্যতিক্রম বাড়াতে হবে তাই আমি করেছি:
class UnableToStripEnd(Exception):
"""A Exception type to indicate that the suffix cannot be removed from the text."""
@staticmethod
def get_exception(text, suffix):
return UnableToStripEnd("Could not find suffix ({0}) on text: {1}."
.format(suffix, text))
def strip_end(text, suffix):
"""Removes the end of a string. Otherwise fails."""
if not text.endswith(suffix):
raise UnableToStripEnd.get_exception(text, suffix)
return text[:len(text)-len(suffix)]
এখানে, আমি একটি সহজ কোড আছে।
url=url.split(".")[0]
ধরে নিচ্ছি আপনি ডোমেনটি মুছে ফেলতে চান, তা যাই হোক না কেন (.কম,। নেট ইত্যাদি)। আমি .
সেই জায়গা থেকে সবকিছু সন্ধান এবং অপসারণের পরামর্শ দিচ্ছি ।
url = 'abcdc.com'
dot_index = url.rfind('.')
url = url[:dot_index]
এখানে আমি rfind
url এর সমস্যার সমাধান করতে ব্যবহার করছি abcdc.com.net
যা নামটি কমিয়ে দেওয়া উচিত abcdc.com
।
আপনি যদি এর জন্যও উদ্বিগ্ন হন তবে আপনার www.
স্পষ্টভাবে তাদের জন্য পরীক্ষা করা উচিত:
if url.startswith("www."):
url = url.replace("www.","", 1)
প্রতিস্থাপনে থাকা 1টি অদ্ভুত প্রান্তক্যাসগুলির মতো www.net.www.com
আপনার ইউআরএল যদি এর চেয়ে আরও বুদ্ধিমান হয়ে থাকে তবে লোকেদের প্রতিক্রিয়া জানায় রেগেক্স উত্তরগুলি।
আমি অন্তর্নির্মিত স্ট্রিপ ফাংশনটি এটি অনুসরণ করার মতো করতে ব্যবহার করেছি:
string = "test.com"
suffix = ".com"
newstring = string.rstrip(suffix)
print(newstring)
test
"test.ccom"
।
এটি নিয়মিত প্রকাশের জন্য একটি নিখুঁত ব্যবহার:
>>> import re
>>> re.match(r"(.*)\.com", "hello.com").group(1)
'hello'
পাইথন> = 3.9:
'abcdc.com'.removesuffix('.com')
পাইথন <3.9:
def remove_suffix(text, suffix):
if text.endswith(suffix):
text = text[:-len(suffix)]
return text
remove_suffix('abcdc.com', '.com')