Как заменить пробелы с подчеркиванием и наоборот?

Я хочу заменить пробел символом подчеркивания в строке, чтобы создать хорошие URL-адреса. Так, например:

"This should be connected" becomes "This_should_be_connected" 

Я использую Python с Django. Можно ли это решить с помощью регулярных выражений?

12 Solutions collect form web for “Как заменить пробелы с подчеркиванием и наоборот?”

Вам не нужны регулярные выражения. Python имеет встроенный строковый метод, который делает то, что вам нужно:

 mystring.replace(" ", "_") 

Замена пространств в порядке, но я мог бы предложить немного поработать с другими URL-враждебными символами, такими как вопросительные знаки, апострофы, восклицательные знаки и т. Д.

Также обратите внимание, что общее мнение экспертов по SEO заключается в том, что тире предпочтительнее подчеркивания в URL-адресах.

 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 

Он отлично работает с символами Unicode.

Python имеет встроенный метод для строк, называемых replace, который используется как таковой:

 string.replace(old, new) 

Таким образом, вы будете использовать:

 string.replace(" ", "_") 

У меня была эта проблема некоторое время назад, и я написал код для замены символов в строке. Я должен начать вспоминать, чтобы проверить документацию на python, потому что у них есть встроенные функции для всего.

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" 

Удивительно, но эта библиотека еще не упомянута

пакет python с именем python-slugify, который выполняет довольно хорошую работу:

 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") 
 mystring.replace (" ", "_") 

если вы присвоите это значение любой переменной, оно будет работать

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

по умолчанию у mystring не будет этого

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

Match et replace space> подчеркивание всех файлов в текущем каталоге

  • Самый быстрый способ вычеркивания пунктуации из строки юникода в Python
  • Повторное выражение Python заменяет значение ASCII
  • Как читать файл и извлекать данные между многострочными шаблонами?
  • Возвращение уникальных совпадений с использованием regex в python
  • Миграция с Python на Racket (библиотеки регулярных выражений и «Racket Way»)
  • Патологическое регулярное выражение, которое взрывается (время и память)?
  • Почему этот фильтр Jinja nl2br исчезает, но не <p>?
  • Сортировка буквенно-цифровых клавиш словаря в python
  •  
    Interesting Posts for Van-Lav

    Проблема с установкой сервера OpenERP с помощью buildout!

    Как удалить python из OSX Leopard, чтобы я мог использовать версию MacPorts?

    Измените IntegerProperty на FloatProperty существующего AppEngine DataStore

    Как я могу получить доступ к относительным путям в Python 2.7 при импорте с помощью разных модулей

    Установка подушки и PIL

    Получение статистики по каждой строке и помещение их в новый столбец. Панды

    numid-сумма антидиагоналей массива

    как «реимпортировать» модуль на python, после чего код будет изменен после импорта

    PYTHON IndexError: индекс tuple выходит за пределы диапазона

    Могу ли я использовать Ruby и Python вместе?

    Хотите предложить браузеру сохранить csv

    Задайте заголовок терминала командной строки Windows в Python

    Извлечение содержимого двоичного файла с использованием Javascript, base64 кодирует его и реверсирует его с помощью Python

    Создайте экземпляр, у меня уже есть тип

    как добавить новую строку в текстовый файл с помощью python без \ n

    Python - лучший язык программирования в мире.