gpt4 book ai didi

python - 使用正则表达式表示 nestedExpr 的开场符

转载 作者:行者123 更新时间:2023-11-28 17:38:50 27 4
gpt4 key购买 nike

我正在尝试使用 pyparsing 来匹配嵌套表达式。有没有办法不用指定内容表达式,用正则表达式来定义开场白?

我的开瓶器由两个标记 A 和 B 组成。这两个标记可能会也可能不会被空格和换行符分隔。

在指定内容规则时,我能够为开启器创建一个 pyparsing 表达式。但是,有没有办法在不指定内容规则的情况下做到这一点?或者,如何指定忽略内容的规则?

opener = Word('A') + ZeroOrMore(' ') + ZeroOrMore('\n') + Word('B')
closer = 'END'
content_rule = SkipTo(opener | closer)


pat = nestedExpr(opener=opener, closer=closer, content=content_rule)


for x in pat.scanString(data):
print x

上下文:我正在尝试从源代码文件中提取 if block 。所以我需要一种提取嵌套表达式的方法。这需要我指定:

  1. 由多个标记组成的开场符,可以用空格分隔('if {')
  2. 一种让接近者只匹配与开启者相对应的结束标签的方法。即其他 block 的关闭器与 if block 的关闭器相同。以循环为例:while () {}。不过,我不确定这是否可行。

最佳答案

你说:

I am not sure if this is possible however.

它不是,至少对于一般的 C 代码而言是这样。例如:

if (a) {
char a = '}';
}

您的解析器没有好的方法可以知道(而不是猜测)第一个闭合花括号不是为了在没有实际解析内部的情况下关闭 if 语句。 (还有注释、双引号字符串等。更不用说没有大括号的 ifs 了!)

如果您确信内部只有平衡的花括号,并且您只想要顶级 if 语句,我的建议是做这样的事情(未经测试,但希望它能理解这个想法):

pat = Literal('if') + nestedExpr("{", "}")

如果你需要嵌套的 ifs,你可以这样做:

expression = Forward()
if_statement = Literal('if') + nestedExpr("{", "}", expression)
expression << ZeroOrMore(Or(if_statement, Regex('.')))

关于python - 使用正则表达式表示 nestedExpr 的开场符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27424437/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com