আমি কিভাবে সাদা স্থানগুলিকে আন্ডারস্কোর এবং বিপরীতে প্রতিস্থাপন করব?


221

আমি দুর্দান্ত ইউআরএল তৈরি করতে একটি স্ট্রিংয়ের আন্ডারস্কোরের সাথে সাদা স্থানকে প্রতিস্থাপন করতে চাই। যাতে উদাহরণস্বরূপ:

"This should be connected" becomes "This_should_be_connected" 

আমি জ্যাঙ্গোর সাথে পাইথন ব্যবহার করছি। এটি কি নিয়মিত এক্সপ্রেশন ব্যবহার করে সমাধান করা যায়?


1
এটি কীভাবে জাঙ্গো টেমপ্লেটে অর্জন করা যায়। সাদা স্পেসগুলি সরানোর কোনও উপায় আছে কি ? এটি করার জন্য কোনও ট্যাগ / ফিল্টার অন্তর্নির্মিত আছে? দ্রষ্টব্য: slugifyপছন্দসই আউটপুট দেয় না।
ব্যবহারকারী 1144616

উত্তর:


374

আপনার নিয়মিত প্রকাশের প্রয়োজন নেই। পাইথনের একটি অন্তর্নির্মিত স্ট্রিং পদ্ধতি রয়েছে যা আপনার যা প্রয়োজন তা করে:

mystring.replace(" ", "_")

29
এটি অন্যান্য শ্বেতক্ষেত্রের অক্ষর যেমন \ t বা একটি অ-ব্রেকিং স্পেস সহ কাজ করে না।
রবার্তো বনভ্যালেট

12
হ্যাঁ আপনি সঠিক, তবে জিজ্ঞাসা করা প্রশ্নটির উদ্দেশ্যে, এই অন্যান্য স্থানগুলি বিবেচনায় নেওয়া প্রয়োজন বলে মনে হচ্ছে না।
rogeriopvl

1
এটি কাজ করার জন্য আমার কি কিছু আমদানি করা দরকার? আমি নিম্নলিখিত ত্রুটিটি পেয়েছি: অ্যাট্রিবিউটআরার: 'বিল্টিন_ফাংশন_অর_মোথারিক' অবজেক্টটির কোনও 'প্রতিস্থাপন' নেই
ওকাস্টা ইশু

2
সম্ভবত যে পরিবর্তনশীলটি আপনি রিপ্লেস অন বলেছিলেন সেটি কোনও স্ট্রিং টাইপ নয়।
স্নিগ্ধা বাত্রা

4
এই উত্তরটি বিভ্রান্তিকর হতে পারে, আরও ভাল এটি মাইস্ট্রিং = মাইস্ট্রিং.রেপ্লেস ("", "_") হিসাবে লিখুন কারণ এটি স্ট্রিংটি সরাসরি পরিবর্তন করে না বরং পরিবর্তিত সংস্করণ দেয়।
মেহেদি

79

জায়গাগুলি প্রতিস্থাপন করা ঠিক আছে, তবে আমি ইউআরএল-প্রতিকূল অক্ষরগুলি যেমন প্রশ্ন চিহ্ন, এস্ট্রোফ্রোস, বিস্মৃত বিবরণ ইত্যাদি হ্যান্ডেল করার জন্য আরও কিছুটা এগিয়ে যাওয়ার পরামর্শ দিতে পারি

এছাড়াও নোট করুন যে এসইও বিশেষজ্ঞদের মধ্যে সাধারণ sens ক্যমত্যটি হ'ল ইউআরএলগুলিতে ড্যাশগুলি আন্ডারস্কোরগুলিতে পছন্দ করা হয়।

import re

def urlify(s):

    # Remove all non-word characters (everything except numbers and letters)
    s = re.sub(r"[^\w\s]", '', s)

    # Replace all runs of whitespace with a single dash
    s = re.sub(r"\s+", '-', s)

    return s

# Prints: I-cant-get-no-satisfaction"
print(urlify("I can't get no satisfaction!"))

এটা মজার. আমি অবশ্যই এই পরামর্শটি ব্যবহার করব।
লুকাস

Urlib.quote () আপনার urlify () এর আউটপুটটি মনে রাখবেন - যদি এর মধ্যে অ-এসকি কিছু থাকে?
zgoda

1
এটি দুর্দান্ত - তবে RE ডাব্লু সহ প্রথম আরআরও হোয়াইটস্পেস সরিয়ে ফেলবে ফলাফলের সাথে পরবর্তী আর আর কিছুই প্রতিস্থাপন করার মতো কিছু নেই ... যদি আপনি আপনার অন্যান্য অক্ষরকে '-' এর সাথে প্রতিস্থাপন করতে চান তবে টোকেনের সাথে প্রথম আর আর প্রতিস্থাপন করতে হবে একক স্থান যেমন নির্দেশিত - যেমন এস = রি.সুব (আর "\ ডাব্লু", '& nbsp', গুলি) (এটি স্ট্যাকওভারফ্লোতে একটি চমকপ্রদ বিন্যাসের সমস্যা হতে পারে: মেটা.স্ট্যাকেক্সেঞ্জিং / ক্রোশনস / 5 / ৫০7// )
তিলুকি

2
@ ট্রিপটিচ আপনার অর্থ কী? আফ্রিকান নাকি ইউরোপীয় গিলে?
তিলুকি

1
এর সাথে আর একটি সামান্য সমস্যা হ'ল আপনি ইউআরএল-এর যে কোনও প্রাইসিং উপস্থিত হাইফেনগুলি সরিয়ে ফেলুন, যাতে ব্যবহারকারী যদি এই-ক্লিনটি পরিষ্কার হওয়ার আগে আপলোড করার আগে ইউআরএল স্ট্রিংটি পরিষ্কার করার চেষ্টা করে থাকে, তবে এটি থিসিস্কিলে চলে যেতে পারে। সুতরাং s = re.sub (r '[^ \ w। S-]', '', গুলি)। আরও এক ধাপ এগিয়ে যেতে পারে এবং শীর্ষস্থানীয় এবং অনুসরণকারী শ্বেত স্থানটি সরিয়ে ফেলতে পারে যাতে ফাইলের নামটি শেষ না হয় বা s = re.sub (r '[^ \ w \ s-]', '', s) দিয়ে হাইফেন দিয়ে শুরু না করে st ()
ইন্টেনেক্স

42

জ্যাঙ্গোর একটি 'স্লুগাইফাই' ফাংশন রয়েছে যা এটি করে, পাশাপাশি অন্যান্য ইউআরএল-বান্ধব অপটিমাইজেশন। এটি ডিফল্ট ফিল্টার মডিউলে লুকিয়ে রয়েছে।

>>> from django.template.defaultfilters import slugify
>>> slugify("This should be connected")

this-should-be-connected

এটি আপনি যে আউটপুটটির জন্য চেয়েছিলেন তা হ'ল নয়, তবে আইএমও এটি ইউআরএল ব্যবহারের জন্য আরও ভাল।


এটি একটি আকর্ষণীয় বিকল্প, তবে এটি স্বাদের বিষয় বা আন্ডারস্কোরগুলির পরিবর্তে হাইফেনগুলি ব্যবহার করার সুবিধা কী। আমি কেবল লক্ষ্য করেছি যে স্ট্যাকওভারফ্লো আপনার পরামর্শ মতো হাইফেন ব্যবহার করে। তবে উদাহরণস্বরূপ digg.com আন্ডারস্কোর ব্যবহার করে।
লুকাস

এটি পছন্দসই বিকল্প হতে পারে (এএফাইক)। আপনার স্ট্রিং নিন, এটিকে স্লুগাইফাই করুন, এটি একটি স্লাগফিল্ডে সঞ্চয় করুন এবং এটি আপনার মডেলের get_absolve_url () এ ব্যবহার করুন। নেটে উদাহরণগুলি সহজেই খুঁজে পেতে পারেন।
শানিউ

3
@ লুলু লোকেরা ড্যাশগুলি ব্যবহার করে কারণ দীর্ঘকাল ধরে, অনুসন্ধান ইঞ্জিনগুলি ড্যাশগুলিকে শব্দ বিভাজক হিসাবে বিবেচনা করে এবং তাই আপনি বহু-শব্দ অনুসন্ধানে আরও সহজ সময় পেতে পারেন get
জেমস বেনেট

@ ড্যানিয়েল রোজম্যান আমি এটিকে গতিশীল পরিবর্তনশীল সহ ব্যবহার করতে পারি। আমি একটি veriable মধ্যে স্ট্রিং হিসেবে গতিশীল ওয়েবসাইট পাচ্ছি যেমন
ক্ষণজীবী

এটি সঠিক উত্তর। আপনার আপনার ইউআরএলগুলি স্যানিটাইজ করা দরকার।
কাগনোনিক

40

এটি স্থান ব্যতীত অন্য ফাঁকা অক্ষরের অ্যাকাউন্টে নেয় এবং আমি মনে করি এটি reমডিউল ব্যবহারের চেয়ে দ্রুত :

url = "_".join( title.split() )

4
আরও গুরুত্বপূর্ণ বিষয় এটি যে কোনও সাদা স্থানের অক্ষর বা শ্বেতস্পেসের অক্ষরের গোষ্ঠীর জন্য কাজ করবে।
শেফার্ড

এই সমাধানটি সমস্ত সাদা স্থানের অক্ষরগুলি পরিচালনা করে না। (যেমন \x8f)
লোকাল_প্রফিল

ভাল ক্যাচ, @ লোকাল_প্রফিল! ডকুমেন্টেশন নির্দিষ্ট করে না যা হোয়াইটস্পেস অক্ষর বিবেচনায় নেয়া হয়।
xOneca

1
এই সমাধানটি পুনরাবৃত্ত সীমানা সংরক্ষণও করবে না, কারণ ডিফল্ট "হোয়াইটস্পেসে বিভক্ত" আচরণ ব্যবহার করার সময় বিভাজন () খালি আইটেম ফেরত দেয় না। এটি হ'ল, যদি ইনপুটটি "হ্যালো, (এখানে 6 টি স্পেস) ওয়ার্ল্ড" হয় তবে এর ফলে "হ্যালো, ______ ওয়ার্ল্ড" না হয়ে আউটপুট হিসাবে "হ্যালো, _ ওয়ার্ল্ড" তৈরি হবে।
ফ্লাইসলাইকাব্রিক

20

reমডিউল ব্যবহার :

import re
re.sub('\s+', '_', "This should be connected") # This_should_be_connected
re.sub('\s+', '_', 'And     so\tshould this')  # And_so_should_this

উপরের মতো আপনার একাধিক স্পেস বা অন্যান্য শ্বেত স্পেস সম্ভাবনা না থাকলে আপনি string.replaceঅন্যরা যেমন পরামর্শ দিয়েছেন ঠিক তেমনই আপনি ব্যবহার করতে পারেন ।


আপনাকে ধন্যবাদ, আমি ঠিক যা চেয়েছিলাম এটাই ছিল। তবে আমি একমত, "স্ট্রিং.রেপ্লেস" আমার কাজের জন্য আরও উপযুক্ত বলে মনে হচ্ছে।
লুকাস

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

10

স্ট্রিংয়ের প্রতিস্থাপন পদ্ধতিটি ব্যবহার করুন:

"this should be connected".replace(" ", "_")

"this_should_be_disconnected".replace("_", " ")


6

আশ্চর্যজনকভাবে এই গ্রন্থাগারের এখনও উল্লেখ করা হয়নি

পাইথন প্যাকেজটির নাম পাইথন-স্লগাইফাই, যা স্লুগাইফাইয়ের বেশ ভাল কাজ করে:

pip install python-slugify

এর মতো কাজ করে:

from slugify import slugify

txt = "This is a test ---"
r = slugify(txt)
self.assertEquals(r, "this-is-a-test")

txt = "This -- is a ## test ---"
r = slugify(txt)
self.assertEquals(r, "this-is-a-test")

txt = 'C\'est déjà l\'été.'
r = slugify(txt)
self.assertEquals(r, "cest-deja-lete")

txt = 'Nín hǎo. Wǒ shì zhōng guó rén'
r = slugify(txt)
self.assertEquals(r, "nin-hao-wo-shi-zhong-guo-ren")

txt = 'Компьютер'
r = slugify(txt)
self.assertEquals(r, "kompiuter")

txt = 'jaja---lol-méméméoo--a'
r = slugify(txt)
self.assertEquals(r, "jaja-lol-mememeoo-a") 

5

আমি আমার বন্ধুত্বপূর্ণ ইউআরএলগুলির জন্য নিম্নলিখিত টুকরা কোডটি ব্যবহার করছি:

from unicodedata import normalize
from re import sub

def slugify(title):
    name = normalize('NFKD', title).encode('ascii', 'ignore').replace(' ', '-').lower()
    #remove `other` characters
    name = sub('[^a-zA-Z0-9_-]', '', name)
    #nomalize dashes
    name = sub('-+', '-', name)

    return name

এটি ইউনিকোড অক্ষরগুলির সাথেও দুর্দান্ত কাজ করে।


1
এটি বিল্ট-ইন জ্যাঙ্গো স্লগাইফাই ফাংশন থেকে কোথায় আলাদা তা আপনি ব্যাখ্যা করতে পারেন?
অ্যান্ডি বেকার

4

পাইথনের স্ট্রিংগুলিতে রিপ্লেস নামে একটি অন্তর্নির্মিত পদ্ধতি রয়েছে যা ব্যবহার করা হয়:

string.replace(old, new)

সুতরাং আপনি ব্যবহার করবেন:

string.replace(" ", "_")

কিছুক্ষণ আগে আমার এই সমস্যা হয়েছিল এবং আমি স্ট্রিংয়ে অক্ষরগুলি প্রতিস্থাপনের জন্য কোড লিখেছিলাম। অজগর ডকুমেন্টেশন চেক করার জন্য আমাকে স্মরণ করা শুরু করতে হবে কারণ তারা সবকিছুর জন্য ফাংশন তৈরি করেছে।


3

ওপি পাইথন ব্যবহার করছে, তবে জাভাস্ক্রিপ্টে (সিনট্যাক্সগুলি একই রকমের থেকে সাবধান হওয়া কিছু।

// only replaces the first instance of ' ' with '_'
"one two three".replace(' ', '_'); 
=> "one_two three"

// replaces all instances of ' ' with '_'
"one two three".replace(/\s/g, '_');
=> "one_two_three"

3
mystring.replace (" ", "_")

আপনি যদি এই ভেরিয়েবলটিকে কোনও ভেরিয়েবলের জন্য বরাদ্দ করেন তবে এটি কার্যকর হবে

s = mystring.replace (" ", "_")

ডিফল্টরূপে মাইস্ট্রিং এর এটি নেই



-3
perl -e 'map { $on=$_; s/ /_/; rename($on, $_) or warn $!; } <*>;'

মিল এবং স্থান প্রতিস্থাপন করুন> বর্তমান ডিরেক্টরিতে সমস্ত ফাইলের আন্ডারস্কোর

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