相关疑难解决方法(0)

什么是正则表达式平衡组?

我刚刚阅读了一个关于如何在双花括号中获取数据的问题(这个问题),然后有人提出了平衡组.我还不太确定它们是什么以及如何使用它们.

我读了平衡组定义,但解释很难理解,我仍然对我提到的问题感到困惑.

有人可以简单地解释什么是平衡组以及它们如何有用吗?

.net c# regex balancing-groups

88
推荐指数
2
解决办法
1万
查看次数

参考 - 这个正则表达式意味着什么?

这是什么?

这是常见问答的集合.这也是社区Wiki,因此每个人都被邀请参与维护.

为什么是这样?

患的是给我泽码型的问题和答案不佳,没有解释.此参考旨在提供质量问答的链接.

范围是什么?

此引用适用于以下语言:,,,,,,.

这可能过于宽泛,但这些语言共享相同的语法.对于特定功能,它背后的语言标签,例如:

  • 什么是正则表达式平衡组?

regex

52
推荐指数
1
解决办法
11万
查看次数

在可变长度的后视中平衡组

TL; DR:在.NET的lookbehinds中使用捕获(特别是平衡组)会改变获得的捕获,尽管它不应该有所作为.什么是.NET的外观打破了预期的行为?

我试图找到另一个问题的答案,作为借助.NET平衡组的借口.但是,我不能让他们在可变长度的lookbehind内工作.

首先,请注意我并不打算高效地使用这个特定的解决方案.这更多是出于学术原因,因为我觉得可变长度的lookbehind有一些我不知道的事情.并且知道这可能在将来派上用场,当我真的需要使用这样的东西来解决问题时.

考虑这个输入:

~(a b (c) d (e f (g) h) i) j (k (l (m) n) p) q
Run Code Online (Sandbox Code Playgroud)

我们的目标是匹配所有的字母,这是由前括号内~,没有多么深跌(所以一切从ai).我的尝试是检查后视镜中的正确位置,以便我可以通过一次调用获得所有字母Matches.这是我的模式:

(?<=~[(](?:[^()]*|(?<Depth>[(])|(?<-Depth>[)]))*)[a-z]
Run Code Online (Sandbox Code Playgroud)

在lookbehind我尝试找到一个~(,然后我使用命名组堆栈Depth来计算无关的开括号.只要打开的括号~(永远不会关闭,那么lookbehind应该匹配.如果到达(?<-Depth>...)那个右括号,则无法从堆栈中弹出任何内容,并且lookbehind应该失败(即,对于所有来自的字母j).不幸的是,这不起作用.相反,我匹配a,b,c,e,f,gm.所以只有这些:

~(a b (c) _ (e f (g) _) _) _ (_ (_ (m) _) _) _
Run Code Online (Sandbox Code Playgroud)

这似乎意味着,一旦我关闭了一个单一的括号,看起来就无法匹配任何东西,除非我回到我以前最高的嵌套水平.

好吧,这可能只是意味着我的正则表达式有些奇怪,或者我没有正确理解平衡组.但后来我尝试了这个没有外观.我为每个字母创建了一个字符串,如下所示:

~(z …
Run Code Online (Sandbox Code Playgroud)

.net regex lookaround balancing-groups

14
推荐指数
1
解决办法
799
查看次数

标签 统计

regex ×3

.net ×2

balancing-groups ×2

c# ×1

lookaround ×1