在多个文本文件中查找正则表达式或正则表达式列表并提取匹配的行

问题描述 投票:1回答:1

问题

注意:我擅长正则表达式,但我是Python新手。我已经尝试了尽可能广泛的阅读,但找不到适合我的情况的解决方案,所以我在问这个问题。

我希望完成以下任务:

  1. 循环浏览文件夹中的所有文本文件(有时我可能会使用.docx / xml文件,但我会找出细节)。我怀疑这是一个反复的问题,但是在这里我不知道该怎么做;
  2. 搜索正则表达式或文件中包含的正则表达式列表(与地名词典一样,最好存储在外部.txt或.csv文件中;
  3. 打印(或最好将其写入CSV或Pandas)文件的名称,找到的匹配项以及包含后者的文本行。理想情况下,它们将放在电子表格的不同列中,因此它们可以是逗号分隔的值,但是字典也可以使用。

我使用这种代码取得了一些成功,这使我能够成功打印匹配行。总共有大约六个小时的Python经验,我感到非常高兴。

import re

def main():
        regex = re.compile("regex")
        with open("text_file.txt") as f:
            for line in f:
                result = regex.findall(line)
                if result == None:
                    continue
                elif result == []:
                    continue
                else:
                    print(f, result, line)

main()

问题和目标:

  • 它在匹配行之前返回正则表达式的所有捕获组(我有多个捕获组)。这不是问题,但是我希望将来能够以某种方式进行操作;
  • 我希望能够重用对象(文件名,匹配项,行)以进行进一步的操作和分析,理想情况下将其全部导入pandas对象,但是我不知道该怎么做。任何建议将不胜感激;
  • 当正则表达式与同一行中的多个模式匹配时,它仅返回包含匹配项的一行。但是,我希望对这种情况进行不同的处理。具体来说,我希望它返回匹配的行数。考虑示例字符串:
We used to call Bob "Little Bobby"

我的正则表达式“鲍勃(by)?”将匹配“鲍勃”和“鲍比”。但是我的代码会打印出这样的内容(如果我没记错的话)。

<_io.TextIOWrapper name='text_file.txt' mode='r' encoding='UTF-8'> [('Bob', ''), ('Bobby', ('by')) We used to call Bob "Little Bobby"

相反,我希望它打印两行(一行用于“ Bob”匹配,另一行用于“ Bobby”匹配。如果我没记错的话,这可以在grep中相对容易地完成,但是我找不到任何有用的方法在重新模块文档中。

python regex python-3.7 text-mining
1个回答
1
投票
  1. 循环浏览文件夹中的所有文本文件(有时我可能会使用.docx / xml文件,但我会找出细节)。我怀疑这是一个反复的问题,但是在这里我不知道该怎么做;

是,您需要进行迭代。我建议根据需要使用os.listdiros.listdir

示例:

glob.glob
  1. 搜索正则表达式或文件中包含的正则表达式列表(与地名词典一样,最好存储在外部.txt或.csv文件中;

我建议使用glob.globimport glob for filename in glob.glob('/path/to/my/dir', '*.txt'): print(filename) # do other stuff with filename

示例:

re.findall

要从比赛中提取组,您需要使用re.findall功能。

  1. 打印(或最好将其写入CSV或Pandas)文件的名称,找到的匹配项以及包含后者的文本行。理想情况下,它们将放在电子表格的不同列中,因此它们可以是逗号分隔的值,但是字典也可以使用。

您可以将所有数据加载到re.finditer s的Python re.finditer中,然后使用import re my_re = re.compile('whatever your regex is') with open(filename) as f: file_contents = f.read() for match in my_re.findall(file_contents): print(match) # do whatever you want with the match here 库将其输出到CSV。

示例:

.groups
© www.soinside.com 2019 - 2024. All rights reserved.