这个代码位于for循环中,完成了我需要它做的事情:
string[i] = re.sub('^, |, $', '', string[i]).replace(', ,', ',').replace(',,', ',').rstrip(",")
根据我指定的模式,删除无关的逗号,以及逗号之前/之后的空格。但它很丑陋。任何有关如何简化它,或至少使其更具可读性的建议都将非常感激。
除了更优雅(如果可能)之外,我基本上希望做的与我在这行代码中所做的完全相同。
非常感谢!
答案 0 :(得分:1)
不坏。由于搜索字符串中的逗号,它看起来更令人困惑。
仅针对最后一部分,re.sub(r', ?,*', ',', string[i])
将摆脱,,
或, ,
或,,,,
,而不是开头和结尾的逗号......
>>> s = 'a,,,,b, ,c'
>>> re.sub(r', ?,*', ',', s)
'a,b,c'
嗯,如果你使用.strip(', ')
代替.rstrip()
,它会在开始和结束时删除所有逗号,所以......
>>> s = ', a,,,,b, ,c, '
>>> re.sub(r', ?,*', ',', s.strip(', ') )
a,b,c
答案 1 :(得分:1)
如果我理解正确,你想要删除逗号旁边的所有空格,将任意数量的相邻逗号变成一个逗号,并删除字符串开头和结尾的逗号。
我怀疑你当前的代码并没有真正完成所有这些(尽管它可能对你的实际数据集有效)。
我是这样做的:
def clean_commas(text):
return re.sub(r' *,[ ,]*', ',', text).strip(',')
正则表达式将空格和逗号(至少有一个逗号)的任意组合转换为单个逗号,周围没有空格。然后,strip
调用会删除结果开头或结尾的所有逗号。
示例输出:
>>> clean_commas("a,,,,b")
'a,b'
>>> clean_commas(" , ,a, b,, , ,, ,c,d e , f ,, ,") # spaces internal to "d e" kept
'a,b,c,d e,f'
如果您愿意,甚至可以在没有任何正则表达式的情况下执行此操作:
def clean_commas(text):
return ','.join(filter(None, (s.strip() for s in text.split(','))))
首先用逗号分隔输入文本(这可能会导致某些项为空字符串,或者只是空格的字符串)。然后,生成器表达式从每个字符串的开头和结尾剥离空白。然后filter(None, ...)
调用跳过任何空的字符串(你可以在生成器表达式的末尾用if s.strip()
实现相同的功能,但是将每个字符串剥离两次似乎很愚蠢)。最后,','.join
调用将输出字符串放在一起,每个值之间只有一个逗号。