如何用下划线替换空格?

我想在字符串中用下划线替换空白,以创建良好的url。例如:

"This should be connected"

应该成为

"This_should_be_connected"

我使用Python和Django。这可以用正则表达式解决吗?

469069 次浏览

你不需要正则表达式。Python有一个内置的string方法,可以满足你的需要:

mystring.replace(" ", "_")

使用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

使用字符串的replace方法:

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

"this_should_be_disconnected".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

这并不完全是您所要求的输出,但在我看来,它更适合在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文档,因为它们为所有东西都内置了函数。

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

匹配和替换当前目录下所有文件的空格>下划线

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"

这考虑了空格以外的空白字符,我认为它比使用re模块更快:

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

令人惊讶的是,这个库还没有被提及

名为Python -slugify的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不会有这个

你可以试试这个:

mystring.replace(r' ','-')
x = re.sub("\s", "_", txt)