我如何不仅捕获匹配项,还捕获它出现的行号?
我有以下脚本:
re.findall(pattern, a_file.read(), re.MULTILINE)
注意:我有很多要解析的文件,并且不希望逐行读取(或重读)文件。
答案 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控制台模拟器,则最终的"\;"
会更改为简单的";"
。