जवाबों:
आपको नियमित अभिव्यक्ति की आवश्यकता नहीं है। पायथन में एक अंतर्निहित स्ट्रिंग विधि है जो आपको आवश्यक है:
mystring.replace(" ", "_")
रिक्त स्थान बदलना ठीक है, लेकिन मैं सुझाव दे सकता हूं कि अन्य URL-शत्रु पात्रों को संभालने के लिए थोड़ा और आगे बढ़ें जैसे प्रश्न चिह्न, अपोस्ट्रोफ़, विस्मयादिबोधक बिंदु, आदि।
यह भी ध्यान दें कि एसईओ विशेषज्ञों के बीच आम सहमति यह है कि डैश URL में अंडरस्कोर करने के लिए पसंद किए जाते हैं।
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!"))
Django में एक 'slugify' फंक्शन है जो ऐसा करता है, साथ ही अन्य URL- फ्रेंडली ऑप्टिमाइजेशन भी करता है। यह डिफ़ॉल्टफ़िल्टर मॉड्यूल में छिपा हुआ है।
>>> from django.template.defaultfilters import slugify
>>> slugify("This should be connected")
this-should-be-connected
यह वास्तव में आपके द्वारा पूछे गए आउटपुट नहीं है, लेकिन IMO यह URL में उपयोग के लिए बेहतर है।
यह अंतरिक्ष के अलावा रिक्त पात्रों को ध्यान में रखता है और मुझे लगता है कि यह 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")
मैं अपने अनुकूल url के लिए निम्नलिखित कोड का उपयोग कर रहा हूं:
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
वांछित आउटपुट नहीं देता है।