gpt4 book ai didi

python - Perl 类似于 Python 中的正则表达式

转载 作者:太空狗 更新时间:2023-10-29 18:13:18 25 4
gpt4 key购买 nike

在 Perl 中,我会做这样的事情,在正则表达式中获取不同的字段,用 () 分隔不同的字段并使用 $

foreach $line (@lines)
{
$line =~ m/(.*?):([^-]*)-(.*)/;
$field_1 = $1
$field_2 = $2
$field_3 = $3
}

我怎么能在 Python 中做这样的事情?

最佳答案

您的代码段的“规范”Python 翻译...:

import re

myre = re.compile(r'(.*?):([^-]*)-(.*)')
for line in lines:
mo = myre.search(line)
field_1, field_2, field_3 = mo.groups()

导入 re 是必须的(导入通常在模块的顶部完成,但这不是强制性的)。预编译 RE 是可选的(如果你使用 re.search 函数,它会即时编译你的模式)但推荐(所以你不依赖于已编译 RE 对象的模块缓存)您的性能,以及为了拥有一个 RE 对象并调用其方法,这在 Python 中更常见)。

您可以使用 match 方法(无论您的模式是否以 '^' 开头,它总是尝试从头开始匹配)或 search 方法(尝试匹配任何地方);对于您给定的模式,它们应该是等效的(但我不是 100% 确定)。

.groups() 方法返回所有匹配的组,因此您可以一次性分配它们(在 Python 中使用列表,就像在 Perl 中使用数组一样,可能更正常,但既然你选择在 Perl 中使用标量,你也可以在 Python 中做同样的事情。

如果任何行与 RE 不匹配,这将失败并抛出异常,如果你知道它们都匹配,这很好(我不确定你的 Perl 的行为是什么,但我认为它会“重用”之前的相反,匹配行的值,这是奇特的......除非,你再次知道所有行都匹配;-)。如果您只想跳过不匹配的行,请将最后一条语句更改为以下两条:

    if mo:
field_1, field_2, field_3 = mo.groups()

关于python - Perl 类似于 Python 中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2637592/

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