我写了一个函数来搜索文件中给定的文本,并返回所有出现该文本的行(在new_list
中)。我想删除字符'/'和'/'之间的所有文本(包括这些字符),因为这些是注解,在返回的列表中不需要。new_list = [ '123456_xxxx /* cccccccccccccc */ /\n", '67890_yyyy /* cccccccccccccc */ /\n", ... ]
其目标是:new_list = [ '123456_xxxx", '67890_yyyy", ... ]
我试着使用re库和正则表达式**(?〈= §)。)**new_list = re.sub('(?<=/*).*?(?=*/)', '', str(new_list))
,但这个函数给出了一个错误:error: nothing to repeat at position 13
PS我也尝试过替换,但它只删除字符,而不是他们之间的一切:new_list = [s.replace(' /*', ' ') for s in new_list]
4条答案
按热度按时间ghhkc1vu1#
如果你不想``和
\n
改变模式:一个二个一个一个
o4tp2gmn2#
只要使用
\/\*.*?\*\/
并记住提供re.S标志就可以跨多行搜索。/和 * 都很特殊,需要在前面加上反斜杠()才能照字面理解。
omjgkv6w3#
您可以将
re.search
与以下正则表达式配合使用。Python演示程序〈-\()/-〉Regex demo
(?:(?!\/\*).)
匹配字符串中的单个字符(x 1m 2n 1x),从字符串的开头开始(^
).(?!\/\*)
是一个 negative lookahead,它Assert字符串中后面的两个字符不是/*
。换句话说,匹配任何字符,直到并且如果它是/
并且下一个字符是*
。这就是所谓的缓和贪婪令牌技术。我添加了 negative lookbehind
(?<!\s)
,以确保匹配不会以空格结束。dwbf0jvd4#
使用字符串索引