Python清洗HTML数据时替换\nvote失败的问题求助
问题分析与解决建议
你的问题核心出在函数的执行逻辑顺序上:在keyname == 'votes'的分支里,你写的第一个return语句会直接终止函数运行,后面的if判断代码根本没有机会执行!不管是判断'\nvote' in text还是text == '1\nvote',这些代码都永远不会被触发,自然没法处理单数形式的1\nvote。
修正方案
方案1:调整执行顺序,分步替换后统一返回
把提前的return去掉,先完成所有替换操作,最后再返回处理后的结果:
def clean_scraped_data(text, keyname=None): if keyname == 'votes': # 先处理复数形式,再处理单数形式 cleaned_text = text.replace('\nvotes', '') cleaned_text = cleaned_text.replace('\nvote', '') return cleaned_text if keyname == 'summary': return text.replace('\nvotes', '') return text
方案2:用正则表达式一次性匹配单复数
如果想更简洁高效,可以用正则匹配\nvote(s)?(同时匹配\nvote和\nvotes),一次性完成替换:
import re def clean_scraped_data(text, keyname=None): if keyname == 'votes': return re.sub(r'\nvote(s)?', '', text) if keyname == 'summary': return text.replace('\nvotes', '') return text
两种方案都能正确把3\nvotes处理成3,把1\nvote处理成1,解决你当前遇到的问题。
内容的提问来源于stack exchange,提问作者CullerWhale
相关产品推荐
相关产品推荐

