13 ответов:
вам не нужны регулярные выражения. Python имеет встроенный строковый метод, который делает то, что вам нужно:
mystring.replace(" ", "_")
замена пробелов в порядке, но я мог бы предложить пойти немного дальше, чтобы обрабатывать другие url-враждебные символы, такие как вопросительные знаки, апострофы, восклицательные знаки и т. д.
также обратите внимание, что общий консенсус среди экспертов SEO заключается в том, что тире, а не подчеркивания в 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-дружественные оптимизации. Он спрятан в модуле defaultfilters.
>>> from django.template.defaultfilters import slugify >>> slugify("This should be connected") this-should-be-connectedЭто не совсем тот вывод, который вы просили, но IMO лучше использовать в URL-адресах.
это учитывает пустые символы, отличные от пробела, и я думаю, что это быстрее, чем использование
reмодуль:url = "_".join( title.split() )
С помощью
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как предлагали другие.
используйте метод замены строки:
"this should be connected".replace(" ", "_")
"this_should_be_disconnected".replace("_", " ")
Я использую следующий фрагмент кода для моих дружественных 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Он отлично работает с символами Юникода.
Python имеет встроенный метод для строк с именем replace, который используется следующим образом:
string.replace(old, new)Так что вы бы использовать:
string.replace(" ", "_")Я имел эту проблему некоторое время назад и я написал код для замены символов в строке. Я должен начать помнить, чтобы проверить документацию python, потому что у них есть встроенные функции для всего.
удивительно, что эта библиотека еще не упоминается
python пакет с именем python-slugify, который делает довольно хорошую работу slugifying:
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")
OP использует python, но в javascript (что-то, чтобы быть осторожным, так как синтаксисы похожи.
// 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"
mystring.replace (" ", "_")Если вы присвоите это значение любой переменной, она будет работать
s = mystring.replace (" ", "_")по умолчанию mystring не будет иметь этого
perl -e 'map { $on=$_; s/ /_/; rename($on, $_) or warn $!; } <*>;'Match et replace space > подчеркивание всех файлов в текущем каталоге
Comments