这与正则表达式非常相关,以匹配外部括号,但是,我特别想知道如何或是否可以执行此正则表达式的递归模式?我还没有找到使用这个策略的python示例,所以认为这应该是一个有用的问题!
我已经看到 了一些 索赔 是递归的模式可以用来匹配平衡括号,但使用Python的没有例子正则表达式包(注:重不支持递归模式,你需要使用正则表达式).
一种说法是语法在b(?:m|(?R))*e哪里:
b是什么开始构造,m是什么可以发生在构造的中间,并且e是在构造的末尾可以发生的
我想在以下内容中提取外部大括号的匹配项:
"{1, {2, 3}} {4, 5}"
["1, {2, 3}", "4, 5"] # desired
Run Code Online (Sandbox Code Playgroud)
请注意,对于内括号,这很容易做到:
re.findall(r"{([^{}]*)}", "{1, {2, 3}} {4, 5}")
['2, 3', '4, 5']
Run Code Online (Sandbox Code Playgroud)
(在我的例子中,我使用的是finditer(在匹配对象上),请看这里.)
所以我曾希望以下或某些变体可行:
regex.findall(r"{(:[^{}]*|?R)}", "{1, {2, 3}} {4, 5}")
regex.findall(r"({(:[^{}]*|?R)})", "{1, {2, 3}} {4, 5}")
regex.findall(r"({(:.*|(?R))*})", "{1, {2, 3}} {4, 5}")
regex.findall(r"({(:.*)|(?R)*})", …Run Code Online (Sandbox Code Playgroud) 递归正则表达式是否理解命名捕获?在文档中有一个注释(?{{ code }}),它是一个独立的子模式,它有自己的一组捕获,在子模式完成时被丢弃,并且有一个注释(?PARNO),它的"类似于(?{{ code }}).(?PARNO)在它完成时丢弃它自己的命名捕获?
我正在写关于Perl的Mastering Perl的递归正则表达式.perlre已经有一个平衡parens的例子(我在Perl正则表达式中匹配平衡括号中显示它),所以我想我会尝试平衡引号:
#!/usr/bin/perl
# quotes-nested.pl
use v5.10;
$_ =<<'HERE';
He said 'Amelia said "I am a camel"'
HERE
say "Matched!" if m/
(
['"]
(
(?:
[^'"]+
|
( (?1) )
)*
)
['"]
)
/xg;
print "
1 => $1
2 => $2
3 => $3
4 => $4
5 => $5
";
Run Code Online (Sandbox Code Playgroud)
这有效,两个引号显示在$1和$3: …
我想将包含递归字符串数组的字符串转换为深度为一的数组.
例:
StringToArray("[a, b, [c, [d, e]], f, [g, h], i]") == ["a", "b", "[c, [d, e]]", "f", "[g, h]", "i"]
Run Code Online (Sandbox Code Playgroud)
看起来很简单.但是,我来自功能背景,我不熟悉.NET Framework标准库,所以每次(我从头开始像3次)我最终只是简单的丑陋代码.我最近的实施就在这里.如你所见,这很丑陋.
那么,C#的做法是什么?