Python 转到行号并提取以下匹配括号中的文本

Python 转到行号并提取以下匹配括号中的文本,python,regex,bash,perl,text-extraction,Python,Regex,Bash,Perl,Text Extraction,在搜索了之前提出的问题之后。我需要一些帮助来解决我的问题。我想要做的可以是任何语言Bash、Perl、Python等。我刚刚开始使用Bash和Perl 我读了一个文本文件,然后我想编写一个脚本,如果我 请给出电话号码 脚本转到该行号并看到第一个括号 搜索直到找到匹配的括号,同时忽略嵌套的括号,并输出其间的所有文本 例如,如果存在代码 输入:我给出行号(如60)作为输入 。 . //第60行 //卷积F j=0; 而(j使用扩展模块检查支架的平衡 import regex m = input

在搜索了之前提出的问题之后。我需要一些帮助来解决我的问题。我想要做的可以是任何语言Bash、Perl、Python等。我刚刚开始使用Bash和Perl

我读了一个文本文件,然后我想编写一个脚本,如果我

  • 请给出电话号码
  • 脚本转到该行号并看到第一个括号
  • 搜索直到找到匹配的括号,同时忽略嵌套的括号,并输出其间的所有文本
例如,如果存在代码

输入:我给出行号(如60)作为输入

。 .

//第60行

//卷积F
j=0;
而(j使用扩展模块检查支架的平衡

import regex
m = input("Enter the line number:\n")
with open('file') as f:
    fil = f.readlines()[int(m)-1:]
    print(regex.search(r'{(?:(?0)|[^{}])*}', ''.join(fil)).group())
上述代码如何工作的示例

$ cat file
foo        
while(j<N_sim)
    {
      Vect_F[j]=0;
      for (k=0; ((k<N_col) & ((j-k)>=0)); k++)
        Vect_F[j]+=F[i][k]*Vect_Up[j-k];
            j++;
    }
$ python3 f.py
Enter the line number:
3
{
      Vect_F[j]=0;
      for (k=0; ((k<N_col) & ((j-k)>=0)); k++)
        Vect_F[j]+=F[i][k]*Vect_Up[j-k];
            j++;
    }
$cat文件
福

虽然(JC您能提供一个文本文件的示例和所需的输出吗?我想您需要一个.net解决方案,因为它支持平衡组。@Stribizev,可以使用Perl regexp通过几种方法来实现,这不包括text::Balanced。这适用于平衡括号,但仍然会被字符串中的
}
愚弄,以实现完美的操作因此,我们需要为每种可能的语言编写一个解析器,同时还需要一个检测功能来找出该文件中的语言。什么是
(?0)
在Python regexp中?看起来像一个表达式,但我在文档中找不到它。@AnttiHaapala:非常正确。更糟糕的是,如果指示的起始行在多行注释中怎么办?真的,这不是一个简单的问题。@rici如果op向我提出此类问题,我将删除此答案。或者我将根据他的注释尝试改进我的答案编辑:)
import regex
m = input("Enter the line number:\n")
with open('file') as f:
    fil = f.readlines()[int(m)-1:]
    print(regex.search(r'{(?:(?0)|[^{}])*}', ''.join(fil)).group())
$ cat file
foo        
while(j<N_sim)
    {
      Vect_F[j]=0;
      for (k=0; ((k<N_col) & ((j-k)>=0)); k++)
        Vect_F[j]+=F[i][k]*Vect_Up[j-k];
            j++;
    }
$ python3 f.py
Enter the line number:
3
{
      Vect_F[j]=0;
      for (k=0; ((k<N_col) & ((j-k)>=0)); k++)
        Vect_F[j]+=F[i][k]*Vect_Up[j-k];
            j++;
    }