如何用正则表达式移除字符串列表中/*与*/间的注释内容?
解决代码注释移除问题
问题分析
你需要移除列表中每个字符串里/*和*/包裹的注释(包含标记本身),同时清理掉多余的后缀字符。之前尝试的正则因为元字符未转义导致错误,replace只能处理固定文本,无法匹配任意长度的注释内容。
错误原因
你写的正则(?<=/*).*?(?=*/)存在两个核心问题:
*是正则的量词元字符,需要转义为\*才能匹配字面量的*符号- 没必要使用lookbehind断言,直接匹配整个
/* ... */块更简单,且lookbehind对量词的支持有限,容易引发语法错误
解决方案
遍历列表中的每个字符串,用正则匹配并移除注释块,再清理多余的后缀字符:
import re # 原始列表 new_list = [ '123456_xxxx /* cccccccccccccc */ /\n', '67890_yyyy /* cccccccccccccc */ /\n' ] processed_list = [] for line in new_list: # 移除/* 到 */之间的所有内容(包含标记) no_comment = re.sub(r'/\*.*?\*/', '', line) # 清理末尾的/和换行符,再去掉前后空白 cleaned_line = no_comment.rstrip('/\n').strip() processed_list.append(cleaned_line) print(processed_list) # 输出结果: ['123456_xxxx', '67890_yyyy']
关键说明
- 正则
r'/\*.*?\*/':/\*匹配字面量/*.*?是非贪婪匹配,确保只匹配到最近的*/,避免跨多个注释块\*/匹配字面量*/
rstrip('/\n')专门清理字符串末尾多余的/和换行符,strip()处理可能残留的首尾空格
内容的提问来源于stack exchange,提问作者user13696679
相关产品推荐
相关产品推荐

