2016-09-30 75 views
2

比方说,我有这些字符串:如何在尚未被空间包围的短划线之后插入空格?

string1= "Queen -Bohemian Rhapsody" 

string2= "Queen-Bohemian Rhapsody" 

string3= "Queen- Bohemian Rhapsody" 

我希望所有的人都变成是这样的:

string1= "Queen - Bohemian Rhapsody" 
    string2= "Queen - Bohemian Rhapsody" 
    string3= "Queen - Bohemian Rhapsody" 

我怎样才能做到这一点在Python?

谢谢!

+0

匹配可选的空间之前和使用可选的比赛预选赛后,用标准化的“' - '”取代“''?”。另请参阅https://docs.python.org/2/library/re.html#regular-expression-syntax –

+0

您的意思是空白与集合中的任何内容'[\ t \ n \ r \ f \ v]'或文字空间字符?例如,对于“Queen \ t- \ tBohemian Rhapsody”作为输入,您是否希望制表符保持原样,因为已经存在空格或用空格替换? – stevenjackson121

回答

7

您可以正则表达式:

import re 
pat = re.compile(r"\s?-\s?") # \s? matches 0 or 1 occurenece of white space 

# re.sub replaces the pattern in string 
string1 = re.sub(pat, " - ", string1) 
string2 = re.sub(pat, " - ", string2) 
string3 = re.sub(pat, " - ", string3) 
+0

严格来说,这将覆盖原始字符串中存在的空白字符''Queen \ t- \ tBohemian Rhapsody'' - >''Queen - Bohemian Rhapsody''如果这是可以接受的,那么这几乎肯定是最好的解决方案。如果要求仅在前面不存在的情况下插入空白(否则不要触摸它),则需要另一种方法。 – stevenjackson121

+0

这很有趣,我没有想到这一点。以及如果更换不允许,那么我想这个解决方案并不完美。 –

+0

感谢您的帮助! – itailitai