gpt4 book ai didi

regex - 如何在 Perl 中找到与正则表达式匹配的子字符串的索引位置?

转载 作者:行者123 更新时间:2023-12-04 12:25:19 27 4
gpt4 key购买 nike

我正在遍历一个文件,在每一行上我都在寻找一个正则表达式。如果找到正则表达式,我只想打印“找到了”,然后是在该行中找到它的位置的索引位置。

例子:

looking for: 'HDWFLSFKD' need index between two Ds
line: MLTSHQKKF*HDWFLSFKD*SNNYNSKQNHSIKDIFNRFNHYIYNDLGIRTIA
output: 'its found' index location: 10-17

上面的“寻找”很简单,但我计划在那里使用复杂的正则表达式。
所以基本上只是想知道是否在字符串中找到了正则表达式,那么我们如何获取它的索引位置?

这是我到目前为止的代码:
foreach my $line (@file_data)
{
if ($line=~ /HDWFLSFKD/){
print "it's found\n";
print "but at what index are the two Ds";
}
else {
$sequence.=$line;
print "came in else\n";
}
}

最佳答案

我相信您正在寻找 pos :

 #!/usr/bin/perl

use strict;
use warnings;

my $sequence;
while (my $line = <DATA>) {
if ($line=~ /(HDWFLSFKD)/g){
print "its found index location: ",
pos($line)-length($1), "-", pos($line), "\n";
} else {
$sequence .= $line;
print "came in else\n";
}
}

__DATA__
MLTSHQKKF*HDWFLSFKD*SNNYNSKQNHSIKDIFNRFNHYIYNDLGIRTIA
MLTSHQKKFSNNYNSKQNHSIKDIFNRFNHYIYNDLGIRTIA
MLTSHQKKFSNNYNSK*HDWFLSFKD*QNHSIKDIFNRFNHYIYNDLGIRTIA

您还可以使用 @- @+ 变量:
#!/usr/bin/perl

use strict;
use warnings;

my $sequence;
while (my $line = <DATA>) {
if ($line=~ /HDWFLSFKD/){
print "its found index location: $-[0]-$+[0]\n";
} else {
$sequence .= $line;
print "came in else\n";
}
}

__DATA__
MLTSHQKKF*HDWFLSFKD*SNNYNSKQNHSIKDIFNRFNHYIYNDLGIRTIA
MLTSHQKKFSNNYNSKQNHSIKDIFNRFNHYIYNDLGIRTIA
MLTSHQKKFSNNYNSK*HDWFLSFKD*QNHSIKDIFNRFNHYIYNDL

关于regex - 如何在 Perl 中找到与正则表达式匹配的子字符串的索引位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/832878/

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