2016-11-10 119 views
0

我需要我的字符串转换,使其制作成特殊格式转换为字符串,删除特殊字符和更换

例如:

string = "the cow's milk is a-okay!" 

converted string = "the-cows-milk-is-a-okay" 
+1

听起来不错。试过什么了吗? –

+0

这可能是''''join(s.split())',但符号移除要求会使其变得模糊 –

+1

看看[String slugification in Python](http://stackoverflow.com/questions/5574042/string- slugification-in-python) –

回答

0
import re 

s = "the cow's milk is a-okay!" 
s = re.sub(r'[^a-zA-Z\s-]+', '', s) # remove anything that isn't a letter, space, or hyphen 
s = re.sub(r'\s+', '-', s) # replace all spaces with hyphens 
print(s) # the-cows-milk-is-a-okay 

这里一个“空间”是任何包含制表符和换行符的空白字符。要更改此设置,请将\s替换为实际空格字符

多个空格的运行将被替换为一个连字符。要更改此设置,请在第二次拨打re.sub时删除+

+0

中的“ - ”再次加入字符串'\ W +'会更好吗? –

+2

@ cricket_007不,这不适用于空格,连字符或下划线。 –

+0

@AlexHall非常感谢!我真的必须重新研究这个。 –

0

这个怎么样(缺点是无法维持的连字符-),

import string 

s = "the cow's milk is a-okay!" 

table = string.maketrans(" ", "-") 
new_s = s.translate(table, string.punctuation) 

print(new_s) 
# the-cows-milk-is-aokay 
+0

这不是OP想要的。具有讽刺意味的是,你承认在你的答案。 –

0
>>> string = "the cow's milk is a-okay!" 
>>> string 
"the cow's milk is a-okay!" 
>>> string = string.replace(' ','-') 
>>> for char in string: 
...  if char in "?.!:;/'": 
...    string = string.replace(char,'') 
... 
>>> string 
'the-cows-milk-is-a-okay' 
0

一个简单的生成器表达式可以用来实现这一点:

>>> s = "the cow's milk is a-okay!" 
>>> ''.join(('-' if el == " " else el if el not in "?.!:;/'" else "" for el in s)) 
'the-cows-milk-is-a-okay' 
>>>