首页 > 解决方案 > 如何在正则表达式值之后拉出部分字符串

问题描述

尝试在将变量正则表达式值写入 csv 之后提取字符串的一部分

我有一个脚本可以清除重要信息的报告。报告的编写方式有 MGRS 网格,后跟一个数字。例如。该报告将有几行如下所示:(MGRS: 12ABC12345678//, 23 个单词后跟更多单词 MGRS: 98ZYX87654321// 17 个更多单词)。我正在尝试创建一个只有 MGRS 网格和以下数字的 csv。

    MGRS_Regex= re.compile('\d{1,2}[A-Za-z]\s?[A-Z-a-z]{2}\s?\d{2,5}\s?{2,5}')
    grid_list = []

    for f in file_list:
        with open(f,'r')as csv_file:
            csv_reader = csvDictReader(csv_file)
            for row in csv_reader:
                for key, value in row.items():
                    if key == 'text_field':  ##text_field is the record##
                        grid_pull = MGRS_Regex.findall(value)
                        for grid in grid_pull:
                            grid_list.append(grid)
                for grid in grid_list:
                    if field == 'important number':  ## field is the key the new csv file##
                        text = row.get('text_field')
                        grid_search = text.find(grid)
                        important_number = text[grid_search : 3]
                        important_info.update({field:important_number})

期望得到一个以变量字段“name”作为键,切出的 str 作为值的字典

标签: regexstringsplitdelimiter

解决方案


我会提供这个正则表达式,希望它就足够了

(?i)\d{1,2}[a-z]\s*[a-z]{2}\s*\d{2,5}\s*\d{2,5}//\s*\d+(?:\s*(?:years|days|weeks))?

https://regex101.com/r/Dwoz3a/1

展开

 (?i)
 \d{1,2} [a-z] \s* [a-z]{2} \s* \d{2,5} \s* \d{2,5} 
 // \s* \d+ 
 (?:
      \s* 
      (?: years | days | weeks )
 )?

推荐阅读