Python 转到行号并提取以下匹配括号中的文本
在搜索了之前提出的问题之后。我需要一些帮助来解决我的问题。我想要做的可以是任何语言Bash、Perl、Python等。我刚刚开始使用Bash和Perl 我读了一个文本文件,然后我想编写一个脚本,如果我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
- 请给出电话号码
- 脚本转到该行号并看到第一个括号
- 搜索直到找到匹配的括号,同时忽略嵌套的括号,并输出其间的所有文本
//卷积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++;
}