Python 关于如何简化这个regex/replace/strip操作有什么建议吗?

Python 关于如何简化这个regex/replace/strip操作有什么建议吗?,python,regex,Python,Regex,这段代码位于for循环中,它完成了我需要它完成的任务: string[i] = re.sub('^, |, $', '', string[i]).replace(', ,', ',').replace(',,', ',').rstrip(",") 它根据我指定的模式删除多余的逗号以及逗号前后的空格。但它非常丑陋。任何关于如何简化它,或者至少使它更具可读性的建议都将不胜感激 基本上,我希望做与我在这一行代码中所做的完全相同的事情,除了更优雅(如果可能的话) 非常感谢 没那么糟。因为搜索字符串中有

这段代码位于for循环中,它完成了我需要它完成的任务:

string[i] = re.sub('^, |, $', '', string[i]).replace(', ,', ',').replace(',,', ',').rstrip(",")
它根据我指定的模式删除多余的逗号以及逗号前后的空格。但它非常丑陋。任何关于如何简化它,或者至少使它更具可读性的建议都将不胜感激

基本上,我希望做与我在这一行代码中所做的完全相同的事情,除了更优雅(如果可能的话)

非常感谢

没那么糟。因为搜索字符串中有逗号,所以看起来特别混乱

就最后一部分而言,
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

如果我理解正确,您希望消除与逗号相邻的所有空格,将任意数量的相邻逗号转换为单个逗号,并删除字符串开头和结尾处的逗号

我怀疑您当前的代码实际上并没有完美地完成所有这一切(尽管对于您的实际数据集来说,它可能工作得足够好)

我是这样做的:

def clean_commas(text):
    return re.sub(r' *,[ ,]*', ',', text).strip(',')
regexp将空格和逗号的任意组合(至少有一个逗号)转换为一个逗号,周围没有空格。然后,
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
调用将输出字符串放在一起,每个值之间只有一个逗号。

示例输入输出?那么在输入
“a,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
中,您真的希望
“a?你确定吗?;-)非常有用的信息。非常感谢你!