【问题标题】:Regex expression for sublists子列表的正则表达式
【发布时间】:2026-02-08 08:40:02
【问题描述】:

我有一个列表,例如:

my_list = [['aaa_house', 'aaa_car', 'aaa_table'], ['aaa_love', 'aaa_hate', 'aaa_life']]

desired_result = [['house', 'car', 'table'], ['love', 'hate', 'life']]

我正在使用正则表达式来过滤所需的字符串。

我试过了:

import re
pattern = re.compile(r'\baaa[_]')
[pattern.search(i).group(1) for i in lista_fim]

我试过了

def find_fims(sublist):
    pattern = re.compile(r'\baaa_')
    return [pattern.search(i).group(1) for i in sublist]


answer = map(find_fims, lista_with_sublists)

我无法使用它获得任何结果。如何将函数应用于列表的子列表但保持我的子列表格式?我只想得到我的子列表的正确名称。

有什么帮助吗?

【问题讨论】:

  • 看来你可以用str.split("_")[1]
  • 使用[pattern.sub('', i) for i in lista_fim]。您的模式与您要丢弃的内容匹配,并且您正在使用它来提取(您不需要的内容)
  • @may 请提供您的实际输入。因为它与_ 分开就足够了。
  • @may 我认为需要对您的列表进行一些澄清:是:[['aaa_house', 'aaa_car', 'aaa_table'], ['aaa_love', 'aaa_hate', 'aaa_life']] 还是 [['aaa_house, aaa_car, aaa_table'], ['aaa_love, aaa_hate, aaa_life']]
  • 使用:[[re.findall(r'aaa_(\w+)', i)[0] for i in j] for j in my_list] 得到输出:[['house', '车','桌子'],['爱','恨','生活']]

标签: python regex list dictionary sublist


【解决方案1】:
import re
out_list = [[re.findall(r'aaa_(\w+)', i)[0] for i in j] for j in lista_with_sublists] 

#output: 

out_list = [['house', 'car', 'table'], ['love', 'hate', 'life']]

【讨论】:

    【解决方案2】:

    您的模式与您要丢弃的内容相匹配,并且您正在使用它来提取(您不需要的内容)。所以,你只需要使用re.sub:

    import re
    
    pattern = re.compile(r'\baaa_')
    my_list = [['aaa_house', 'aaa_car', 'aaa_table'], ['aaa_love', 'aaa_hate', 'aaa_life']]
    print([[pattern.sub('', i) for i in y] for y in my_list])
    

    输出:

    [['house', 'car', 'table'], ['love', 'hate', 'life']]
    

    See the Python demoregex demo

    注意如果您想在字符串开头匹配aaa,请将\b 替换为^。见this regex demo

    请注意,您不需要将_ 放入字符类中,_ 不是特殊的正则表达式元字符,将单个单词 char 放入字符类几乎没有意义(此构造旨在填充具有多个字符或字符范围)。

    【讨论】:

    • 谢谢!您的解释非常清晰易懂!
    • @may 请注意,在您在问题中提供的示例中,aaa 似乎位于字符串的开头和单词的开头。如果您只想在字符串的开头匹配aaa,您应该使用^aaa_(或^a{3}_,如果它仍然适合您阅读)
    【解决方案3】:

    请尝试以下模式:

    (\w)\1+_(\w+)
    
    • (\w)\1+ 匹配要丢弃的重复字符串,例如啊
    • (\w+) 捕获Group 2下的目标词

    您将不得不使用第 2 组而不是第 1 组。

    【讨论】:

    • 在这个例子中,模式 aaa_ 应该写在哪里?
    • (\w)\1+ 是广义形式。 (\w) 捕获第 1 组下的一个单词字符,之后的量词 '\1+' 告诉它匹配第 1 组中的相同字符至少一次,并且根据需要多次匹配