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

"This should be connected" 

应该成为

"This_should_be_connected" 

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


当前回答

Python在字符串上有一个内置的方法,叫做replace,它的用法如下:

string.replace(old, new)

所以你可以用:

string.replace(" ", "_")

我以前遇到过这个问题,我写了代码来替换字符串中的字符。我必须开始记得检查python文档,因为它们为所有东西都内置了函数。

其他回答

这考虑了空白字符而不是空格,我认为它比使用re模块更快:

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

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

mystring.replace(" ", "_")

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

名为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") 
perl -e 'map { $on=$_; s/ /_/; rename($on, $_) or warn $!; } <*>;'

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

使用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。按照其他人的建议替换。