regex - 帮助在类似 C 的语言中提取匹配花括号之间的文本 block

标签 regex graphviz text-extraction

我有一些我为 HDF5 文件格式制作的文档,它是用 GraphViz 点语言编写的。 (这是一种带有很多大括号的类 C 语言。)这个主文件包含许多这样的元素:

subgraph cluster_clustername { 
                              ...
                              lots of stuff including more curly braces spanning multiple lines
                              ...
                              }

我想根据集群名称提取这段文本。 (我想单独创建这些子图的图,而不是包含所有内容的超大图。每个子图簇都是一个单独的 HDF5 文件,它们通过 HDF5 外部软链接(soft link)连接。)

应该有一种方法来提取这个所需的大块文本(一个练习,通过嵌套在多行中匹配第一个 { 在一些特定的文本模式之后和结束}。这似乎应该是一个相对常见的任务,因为C 和类 C 语言的流行程度。

在我看来,实现这一目标的最佳候选工具是:

awk

python

gvpr - graphviz 提供的图形流编辑器(但这对其他人没有帮助,说 C 程序员有同样的问题并且网络上存在的例子很少并且语法令人困惑)

安全

目前我维护主文件,然后使用 M-x ediff-regions-linewise 更新 Emacs 中的每个派生文件,但我需要一个自动化的(这样我可以使用 Make 来构建文档文件)和生成派生文件的可靠方法.上面我唯一经验不足的工具是 sed,但由于模式很复杂并且跨越多行,我认为像 awk 或 python 这样的工具可能更适合这项任务。

事实上,我在 awk 中尝试了一种类似于引用计数的技术,但我在理解 awk 的一些更微妙的行为时遇到了问题,并且过去只真正使用过 awk one liner。

非常感谢您提供的任何帮助。 -Z

最佳答案

使用 Perl,您将使用 Text::Balanced module .它可以在平衡定界符之前、内部和之后为您返回文本。

关于regex - 帮助在类似 C 的语言中提取匹配花括号之间的文本 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5491912/

相关文章:

c++ - 无法为 read_graphviz() 示例链接 Boost Graph Library

java - 如何使用 tika 提取 .ppt 文件的文本?

java - 我收到 java.lang.NoClassDefFoundError : org/bouncycaSTLe/asn1/ASN1Primitive error

sql - 用于提取字符串中多次出现的模式的正则表达式

graphviz:创建具有相同标签的新节点

c# - 从文本文件中删除一些特殊的词

graphviz - 如何在 Graphviz 中编写自定义箭头

php - 获取逗号分隔字符串中的最后一个值

c# - 仅替换 HTML 标记中的引号的正则表达式

java - 匹配双引号但不匹配反斜杠双引号的正则表达式