gpt4 book ai didi

python - 如何在 Python 中将正则表达式子模式与命名组一起使用?

转载 作者:行者123 更新时间:2023-11-30 23:29:35 25 4
gpt4 key购买 nike

我正在将一个包含大量正则表达式的脚本从 Perl 翻译为 Python,但我遇到了正则表达式子模式的问题。

在 Perl 中,如果我按预期编写以下代码,即写入字符串“OK”。我从来没有考虑过它,但看起来 Perl 知道这些是不同的组,尽管它们具有相同的名称。

my $ident  = qr{ (?<guill> ['"`]? ) [a-zA-Z_] \w* \g{guill} }x;
my $idents = qr{ (?: $ident \s* , \s* )* $ident }x;
my $test = q{'test', "test"};

if ($test =~ $idents) {
say 'OK';
}

除了在编译为正则表达式模式之前连接字符串之外,我没有找到在 Python 中的模式内插入子模式的方法,因此我将 Perl 代码翻译为:

ident  = r"(?P<guill> ['\"`]? ) [a-zA-Z_] \w* (P=guill)"
idents = r"(?: " + ident + r" \s* , \s* )* " + ident
test = "'test', \"test\""

if re.match( idents, test, re.VERBOSE ):
print "OK"

毫不奇怪,这甚至无法编译,因为 Python 提示“将组名‘guill’重新定义为组 3”。我尝试了 Perlish 方式和 re.compile'd ident,但随后它拒绝将字符串与模式对象连接起来。

实现这一目标的 Python 方式是什么?

最佳答案

这可以使用真正的正则表达式来完成。

ident0 = r"[a-zA-Z_] \w*"
ident1 = r"' [a-zA-Z_] \w* '"
ident2 = r"\" [a-zA-Z_] \w* \""
ident3 = r"` [a-zA-Z_] \w* `"
ident = "(?:" + ident0 + "|" + ident1 + "|" + ident2 + "|" + ident3 + ")"

关于python - 如何在 Python 中将正则表达式子模式与命名组一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21097266/

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