这就是我的方法
my sample.tcl contains
proc abc {} {
proc def {} {
}
}
proc qqq {} {
}
proc def {} {
}
code :
with open('sample.tcl', 'r') as file:
script = file.read()
proc_defs = re.findall(r'proc\\s+\\w+\\s+{(?:\[^{}\]*{\[^{}\]*})\*}', script, re.DOTALL)
for proc_def in proc_defs:
print("Procedure definition:", proc_def)
对于上面的例子,当我给出 abc 时它应该返回
proc abc {} {
proc def {} {
}
}
还有什么更好的办法吗
您的正则表达式从语法和逻辑的角度来看都是无效的。 请你尝试一下:
import re
with open('sample.tcl', 'r') as file:
script = file.read()
proc_defs = re.findall(r'proc\s+\w+\s+\{[^{}]*}\s+\{(?:[^{}]*|\{[^{}]*})*}', script, re.DOTALL)
for proc_def in proc_defs:
print("Procedure definition:", proc_def)
输出:
('Procedure definition:', 'proc abc {} {\nproc def {} {\n}\n}')
('Procedure definition:', 'proc qqq {} {\n}')
('Procedure definition:', 'proc def {} {\n}')
如果您想选择
abc
的定义,请修改正则表达式:
将 \w+
替换为 abc
。