代码之家  ›  专栏  ›  技术社区  ›  Sai Kumar

匹配列表中不带.csv扩展名的字符串的正则表达式

  •  0
  • Sai Kumar  · 技术社区  · 8 年前

    如何编写正则表达式以仅匹配不带.csv扩展名的字符串名称。这应该是所需的输出

    Required Output:
     ['ap_2010', 'class_size', 'demographics', 'graduation','hs_directory', 'sat_results']
    
    Input:
    data_files = [
    "ap_2010.csv",
    "class_size.csv",
    "demographics.csv",
    "graduation.csv",
    "hs_directory.csv",
    "sat_results.csv"]
    

    我试过了,但它返回了一个空列表。

    for i in data_files:
        regex = re.findall(r'/w+/_[/d{4}][/w*]?', i)
    
    5 回复  |  直到 8 年前
        1
  •  4
  •   user3483203    8 年前

    如果您真的想使用正则表达式,可以使用 re.sub 若要删除扩展名,如果不存在,则只保留字符串:

    [re.sub(r'\.csv$', '', i) for i in data_files]
    
    ['ap_2010',
     'class_size',
     'demographics',
     'graduation',
     'hs_directory',
     'sat_results']
    

    os 处理与文件名有关的任何内容的模块:

    [os.path.splitext(i)[0] for i in data_files]
    
    ['ap_2010',
     'class_size',
     'demographics',
     'graduation',
     'hs_directory',
     'sat_results']
    
        2
  •  2
  •   pwxcoo    8 年前

    如果您想要regex,解决方案是 r'(.*)\.csv

    for i in data_files:
        regex = re.findall(r'(.*)\.csv', i)
        print(regex)
    

    enter image description here

        3
  •  1
  •   Aidan Rosswood    8 年前

    把绳子分开 '.' [-1] ). 如果这是 'csv' 然后是一个csv文件。

    for i in data_files:
        if i.split('.')[-1].lower() == 'csv':
            # It is a CSV file
        else:
            # Not a CSV
    
        4
  •  1
  •   KaiserKatze    8 年前
    # Input
    data_files = [ 'ap_2010.csv', 'class_size.csv', 'demographics.csv', 'graduation.csv', 'hs_directory.csv', 'sat_results.csv' ]
    
    import re
    
    pattern = '(?P<filename>[a-z0-9A-Z_]+)\.csv'
    prog = re.compile(pattern)
    
    # `map` function yields:
    #  - a `List` in Python 2.x
    #  - a `Generator` in Python 3.x
    result = map(lambda data_file: re.search(prog, data_file).group('filename'), data_files)
    
        5
  •  1
  •   U13-Forward    8 年前
    l = [
    "ap_2010.csv",
    "class_size.csv",
    "demographics.csv",
    "graduation.csv",
    "hs_directory.csv",
    "sat_results.csv"]
    
    print([i.rstrip('.'+i.split('.')[-1]) for i in l])