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