【发布时间】:2015-05-14 19:43:53
【问题描述】:
我正在尝试将 perl 脚本转换为 python,但我被正则表达式语句挂断了。
Perl 脚本:
open NICKNAME, $NICKNAMEFILE or die "$NICKNAMEFILE: $!";
<NICKNAME> =~ /.+[.].+[.](.+)/;
my $project = $1;
$struct{'project'} = $project;
close NICKNAME;
open KEYFILE, $KEYHASHFILE or die "$KEYHASHFILE: $!";
<KEY> =~ /^([-\w\d]+)$/;
my $key = $1;
$struct{'key'} = $key;
close KEYFILE;
Python:
nickname = open(NICKNAMEFILE, "r")
project = re.search(#something)
struct['project'] = project
nickname.close()
keyfile = open(KEYHASHFILE, "r")
key = re.search(#something)
struct['key'] = key
keyfile.close()
【问题讨论】:
-
#something = r'.+[.].+[.](.+)' -
你能解释一下它的真正含义吗?它是否在字符串中查找任意数量的小数?
-
我刚刚将正则表达式定义从 Perl 翻译成 Python。
-
/.+[.].+[.](.+)/ 正在寻找“任何字符”(.)至少一次(+),后跟文字 .然后再次相同(至少一个任何字符后跟一个点),然后它查找至少一个任何字符,但将值记录在 $1 中以备后用。第二个是查找任何字母数字字符和“-”,至少一次,并且字符串中没有其他字符。它还将结果存储在 $1
-
一串字符后跟一个点,然后是一堆字符,然后是另一个点,然后是另一串被捕获的字符。我强烈怀疑该模式实际上需要锚定,并且您可能应该在尝试之前进行更多研究。此外,脚本不会检查匹配是否成功,您的翻译代码也不会检查,这样就会造成破坏和灾难。