如何移除字符串中的 ?爬取YouTube字幕时遇移除失效问题
解决YouTube字幕爬取中无法移除换行的问题
嘿,我看你遇到的问题是用replace("\n", ' ')没法移除字符串里的换行,其实根源出在你把整个字幕列表直接转成字符串来处理了,这种做法会引入一堆不必要的格式混乱和转义字符,导致你的换行匹配根本找不到目标。
为什么原来的方法行不通?
当你调用str(subtitles)时,Python会把这个包含字典的列表转换成它的“打印字符串表示”——里面不仅有你需要的字幕文本,还有字典的键(比如'start'、'duration')、括号、引号,甚至原来文本里的换行可能被转义成了\\n,或者整个列表字符串里的换行是控制台打印时的换行,根本不是你代码里要匹配的\n。这就导致你的replace("\n", ' ')完全找不到对应的字符。
更优雅可靠的解决方法
直接遍历get_transcript()返回的列表,每个元素是一个字典,你只需要提取里面的'text'字段就行了,完全不用去处理那些冗余的格式:
from youtube_transcript_api import YouTubeTranscriptApi import re # 获取原始字幕列表,每个元素是包含text、start、duration的字典 subtitles = YouTubeTranscriptApi.get_transcript('VW2VScHV7b4') # 提取所有字幕文本,同时替换每个文本块里的换行 cleaned_text = ' '.join([item['text'].replace('\n', ' ') for item in subtitles]) # 执行你需要的其他清理操作 cleaned_text = cleaned_text.replace('[Music]', '') cleaned_text = cleaned_text.replace('♪INTRO', '') # 移除小写字母后的数字 cleaned_text = re.sub(r'(?<=[a-z])\d+\b', '', cleaned_text) print(cleaned_text)
如果你非要修复原来的代码(不推荐)
要是你想坚持原来的字符串处理思路,那你需要匹配转义后的换行符,把replace("\n", ' ')改成replace("\\n", ' ')——但这种方法非常脆弱,只要YouTube的字幕返回格式稍有变化,你的正则就会失效,所以还是推荐上面的方法。
内容的提问来源于stack exchange,提问作者Anurag Dutta
相关产品推荐
相关产品推荐

