如何从字符串列表中删除,使用regex的所有字符串之间的'a'和'b'?

ruoxqz4g  于 2023-03-09  发布在  其他
关注(0)|答案(4)|浏览(126)

我写了一个函数来搜索文件中给定的文本,并返回所有出现该文本的行(在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]

ghhkc1vu

ghhkc1vu1#

import re

list = [ f'123456_xxxx /* cccccccccccccc */ /\n',  f'67890_yyyy /* cccccccccccccc */ /\n']
newList = []

pattern = f'\/\*.*\*\/'
for str in list:
    newList.append( re.sub(pattern, '', str))
    
print(newList)
['123456_xxxx  /\n', '67890_yyyy  /\n']

如果你不想``和\n改变模式:
一个二个一个一个

o4tp2gmn

o4tp2gmn2#

只要使用\/\*.*?\*\/并记住提供re.S标志就可以跨多行搜索。
/和 * 都很特殊,需要在前面加上反斜杠()才能照字面理解。

omjgkv6w

omjgkv6w3#

您可以将re.search与以下正则表达式配合使用。

^(?:(?!\/\*).)+(?<!\s)

Python演示程序〈-\()/-〉Regex demo
(?:(?!\/\*).)匹配字符串中的单个字符(x 1m 2n 1x),从字符串的开头开始(^). (?!\/\*)是一个 negative lookahead,它Assert字符串中后面的两个字符不是/*。换句话说,匹配任何字符,直到并且如果它是/并且下一个字符是*。这就是所谓的缓和贪婪令牌技术。
我添加了 negative lookbehind(?<!\s),以确保匹配不会以空格结束。

dwbf0jvd

dwbf0jvd4#

使用字符串索引

    • 代码**
old_list = ['123456_xxxx /* cccccccccccccc */ /\n',  '67890_yyyy /* cccccccccccccc */ /\n']

new_list = []

for i in old_list:
    new_list.append(i[:10])

print(new_list)
    • 产出**
['123456_xxx', '67890_yyyy']

相关问题