我一直在尝试将一些代码从Perl转换为Python。我在理解Perl中使用的正则表达式时遇到了问题,因为我之前从未学习过Perl。
任何人都可以帮我理解下面的代码行吗?
$seqfile =~ /(\S+)\.txt/
********新问题:************
下面,变量'name'具有与之关联的字符串值。为什么以下行更新(使用++)哈希变量(hash_lib)的值,就像它是一个整数值一样。 如果它是一个哈希,为什么在声明哈希变量时它不使用'%'。你能用'$'创建哈希吗?
$hash_lib{$name}++;
另一件事是,我们可以使用两个键为单个值创建哈希吗?如果是这样,python等同于以下几行?
$hash_abun{$name}{$seq}= $abun;
答案 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