以下代码可以满足我的需求:
if myString.startswith(", "):
myString = myString.lstrip(", ")
if myString.endswith(", "):
myString = myString.rstrip(", ")
if re.search(", ,", myString):
myString = re.sub(", ,", "", myString)
基本上,我希望它删除任何前导逗号,尾随逗号,以及两个逗号之间没有任何内容的任何地方。这样做可以解决问题,但我认为有一种方法可以简化这一过程,使其更加优雅并使用更少的代码行。
任何建议都会受到赞赏。提前谢谢!
答案 0 :(得分:8)
对于启动器,我使用.strip,它同时包含rstrip和lstrip。然后,替换两个逗号:
MyString = MyString.strip(", ").replace(", , ", "")
答案 1 :(得分:2)
使用split
+ join
:
>>> s = ', a, b, ,c, '
>>> ', '.join(x for x in map(str.strip, s.split(',')) if x)
'a, b, c'
答案 2 :(得分:1)
您可以使用re.sub:
import re
myString = re.sub('^, |, $|, ,', '', myString)
答案 3 :(得分:1)
答案中的代码与timeit进行比较:
s = ", 1, 2, , 3, 4, , 5, 6, , 7, 8, , 9, 10, , 11, 12, , 13, 14, , 15, 16 ,"
def f1(s):
s = s.strip(", ").replace(", , ", "")
def f2(s):
s = ', '.join(x for x in map(str.strip, s.split(',')) if x)
def f3(s):
s = re.sub('^, |, $|, ,', '', s)
if __name__ == '__main__':
import timeit, re
print(timeit.timeit("f1(s)", setup="from __main__ import f1, s"))
print(timeit.timeit("f2(s)", setup="from __main__ import f2, s"))
print(timeit.timeit("f3(s)", setup="from __main__ import f3, s"))
结果(在我的上网本上):
1.44931602478
13.0764448643
11.3456158638
答案 4 :(得分:0)
你可能想要那个,而不是一无所有。
>>> " ,a,b,,c, ".strip(' ,').replace(',,', ',')
'a,b,c'