我有一个字符串,我希望从中提取一个单词,但附加一个数字,每行可能有所不同:
This is string1 this is string
This is string11
This is string6 and it is in this line
我想解析这个文件并获取“stringXXX”的值,从0到100开始
# suppose ABC.txt contains the above lines
FH1 = open "Abc.txt";
@abcFile = <FH1>;
foreach $line(@abcFile) {
if ($pattern =~ s/string.(d{0}d{100});
print $pattern;
以上打印整行,我希望只获得stringXXX
答案 0 :(得分:13)
你需要抓住它:
while ($pattern =~/(string(100|\d{1,2}))/g) {
print $1;
}
说明:
编辑:修正了捕获的数字的顺序。
答案 1 :(得分:5)
Abc.pl:
#!/usr/bin/perl -w
while(<>) {
while (/(string(\d{1,3}))/g) {
print "$1\n" if $2 <= 100;
}
}
示例:
$ cat Abc.txt
This is string1 this is string
This is string11
This is string6 and it is in this line
string1 asdfa string2
string101 string3 string100 string1000
string9999 string001 string0001
$ perl Abc.pl Abc.txt
string1
string11
string6
string1
string2
string3
string100
string100
string001
string000
$ perl -nE"say $1 while /(string(?:100|\d{1,2}(?!\d)))/g" Abc.txt
string1
string11
string6
string1
string2
string3
string100
string100
注意输出之间的差异。什么是可取的取决于您的需求。
答案 2 :(得分:-1)
不要过度指定。要捕获数字部分,只需使用(\ d +)。这将捕获任意长度的数量,以便有一天当提供此文件的猴子决定将其范围扩大到999时,您将被覆盖。现在你写作时以及以后维护时都会少想。
严格要求你所发出的东西,但要接受你所接受的自由。
答案 3 :(得分:-2)
只需将print $ pattern更改为打印$&amp;,已经捕获。