如何使用Python找到正则表达式出现的行

时间:2015-11-06 22:03:24

标签: python regex

我如何不仅捕获匹配项,还捕获它出现的行号?

我有以下脚本:

re.findall(pattern, a_file.read(), re.MULTILINE)

注意:我有很多要解析的文件,并且不希望逐行读取(或重读)文件。

2 个答案:

答案 0 :(得分:3)

尝试遍历每一行(带计数)以确定可以找到匹配的行号。它可能看起来像这样:

with open('somefile.txt', 'r') as a_file:
    linecount = 0
    for line in a_file:
        linecount += 1
        result = re.findall(pattern, line)
        ...

答案 1 :(得分:0)

如果要解析大量文件,则应考虑使用基于shell脚本的此代码版本。我非常喜欢python,但了解UNIX工具的方式有时候会更容易。使用正确的工具来完成正确的工作。

如果您可以访问Linux计算机或cmder之类的命令行模拟器,则可以执行以下操作:

 find . -name "*.java" -exec grep -n -E "LOGGER.\w+\(" {} \;

-n为您提供行号,-E指定grep应该查找模式,而不是文字匹配。此示例查找当前目录结构中的所有* .java文件(当前文件夹和所有子文件夹),并搜索它找到的每个字符串,例如" LOGGER.info("," LOGGER。 debug("," LOGGER.error(",它在我的java代码中显示了我所有的日志记录语句,但没有显示LOGGER初始化的语句。

您通常会发现这也比使用单个python脚本反复快速,甚至使用python脚本循环遍历文件。

编辑:一面注意 - 如果您使用的是Windows控制台模拟器,则最终的"\;"会更改为简单的";"