উত্তর:
আপনার নিয়মিত প্রকাশের প্রয়োজন নেই। পাইথনের একটি অন্তর্নির্মিত স্ট্রিং পদ্ধতি রয়েছে যা আপনার যা প্রয়োজন তা করে:
mystring.replace(" ", "_")
জায়গাগুলি প্রতিস্থাপন করা ঠিক আছে, তবে আমি ইউআরএল-প্রতিকূল অক্ষরগুলি যেমন প্রশ্ন চিহ্ন, এস্ট্রোফ্রোস, বিস্মৃত বিবরণ ইত্যাদি হ্যান্ডেল করার জন্য আরও কিছুটা এগিয়ে যাওয়ার পরামর্শ দিতে পারি
এছাড়াও নোট করুন যে এসইও বিশেষজ্ঞদের মধ্যে সাধারণ 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!"))
জ্যাঙ্গোর একটি 'স্লুগাইফাই' ফাংশন রয়েছে যা এটি করে, পাশাপাশি অন্যান্য ইউআরএল-বান্ধব অপটিমাইজেশন। এটি ডিফল্ট ফিল্টার মডিউলে লুকিয়ে রয়েছে।
>>> from django.template.defaultfilters import slugify
>>> slugify("This should be connected")
this-should-be-connected
এটি আপনি যে আউটপুটটির জন্য চেয়েছিলেন তা হ'ল নয়, তবে আইএমও এটি ইউআরএল ব্যবহারের জন্য আরও ভাল।
এটি স্থান ব্যতীত অন্য ফাঁকা অক্ষরের অ্যাকাউন্টে নেয় এবং আমি মনে করি এটি re
মডিউল ব্যবহারের চেয়ে দ্রুত :
url = "_".join( title.split() )
\x8f
)
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
অন্যরা যেমন পরামর্শ দিয়েছেন ঠিক তেমনই আপনি ব্যবহার করতে পারেন ।
আশ্চর্যজনকভাবে এই গ্রন্থাগারের এখনও উল্লেখ করা হয়নি
পাইথন প্যাকেজটির নাম পাইথন-স্লগাইফাই, যা স্লুগাইফাইয়ের বেশ ভাল কাজ করে:
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")
আমি আমার বন্ধুত্বপূর্ণ ইউআরএলগুলির জন্য নিম্নলিখিত টুকরা কোডটি ব্যবহার করছি:
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
এটি ইউনিকোড অক্ষরগুলির সাথেও দুর্দান্ত কাজ করে।
পাইথনের স্ট্রিংগুলিতে রিপ্লেস নামে একটি অন্তর্নির্মিত পদ্ধতি রয়েছে যা ব্যবহার করা হয়:
string.replace(old, new)
সুতরাং আপনি ব্যবহার করবেন:
string.replace(" ", "_")
কিছুক্ষণ আগে আমার এই সমস্যা হয়েছিল এবং আমি স্ট্রিংয়ে অক্ষরগুলি প্রতিস্থাপনের জন্য কোড লিখেছিলাম। অজগর ডকুমেন্টেশন চেক করার জন্য আমাকে স্মরণ করা শুরু করতে হবে কারণ তারা সবকিছুর জন্য ফাংশন তৈরি করেছে।
ওপি পাইথন ব্যবহার করছে, তবে জাভাস্ক্রিপ্টে (সিনট্যাক্সগুলি একই রকমের থেকে সাবধান হওয়া কিছু।
// 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"
perl -e 'map { $on=$_; s/ /_/; rename($on, $_) or warn $!; } <*>;'
মিল এবং স্থান প্রতিস্থাপন করুন> বর্তমান ডিরেক্টরিতে সমস্ত ফাইলের আন্ডারস্কোর
slugify
পছন্দসই আউটপুট দেয় না।