Perl到Python转换问题:正则表达式解释

时间:2014-09-09 19:19:55

标签: regex perl

我一直在尝试将一些代码从Perl转换为Python。我在理解Perl中使用的正则表达式时遇到了问题,因为我之前从未学习过Perl。

任何人都可以帮我理解下面的代码行吗?

$seqfile =~ /(\S+)\.txt/

********新问题:************

下面,变量'name'具有与之关联的字符串值。为什么以下行更新(使用++)哈希变量(hash_lib)的值,就像它是一个整数值一样。 如果它是一个哈希,为什么在声明哈希变量时它不使用'%'。你能用'$'创建哈希吗?

 $hash_lib{$name}++;

另一件事是,我们可以使用两个键为单个值创建哈希吗?如果是这样,python等同于以下几行?

 $hash_abun{$name}{$seq}= $abun;

2 个答案:

答案 0 :(得分:1)

/(\S+)\.txt/
#     ^^^^^--- file extension?
# ^^^--------- file name?

正则表达式将匹配一个或多个非空白字符\S+的字符串 - 可能是文件名 - 后跟文字字符串.txt - 可能是文件扩展名。此文件名被捕获到变量$1中(如果在列表上下文中,也由表达式返回)。通常,此表达式应如下所示用于捕获字符串:

my $basename;
...
if ($seqfile =~ /(\S+)\.txt/) {
    $basename = $1;
}

或者

my ($basename) = $seqfile =~ /(\S+)\.txt/

这可能是捕获纯文本文件的基本名称的一种方法。做这种事情的更好方法是使用File::Basename qw(basename)。但这可能与Perl到Python的转换无关。

答案 1 :(得分:0)

\S ===非空格字符

+ ==== 1或更多

(``) === 1组

. =====任何角色

txt === TXT