我需要从ABS,TVS和PERL等文件中提取某些缩写。任何大写字母的缩写。我最好喜欢用正则表达式来做这件事。任何帮助表示赞赏。
答案 0 :(得分:4)
听到你特别遇到麻烦的部分会很高兴。
my %abbr;
open my $inputfh, '<', 'filename'
or die "open error: $!\n";
while ( my $line = readline($inputfh) ) {
while ( $line =~ /\b([A-Z]{2,})\b/g ) {
$abbr{$1}++;
}
}
for my $abbr ( sort keys %abbr ) {
print "Found $abbr $abbr{$abbr} time(s)\n";
}
答案 1 :(得分:3)
从标准输入和写入中读取要搜索的文本 找到标准输出的所有缩写,用空格分隔:
my $text;
# Slurp all text
{ local $/ = undef; $text = <>; }
# Extract all sequences of 2 or more uppercase characters
my @abbrevs = $text =~ /\b([[:upper:]]{2,})\b/g;
# Output separated by spaces
print join(" ", @abbrevs), "\n";
注意使用POSIX字符类[:upper:],它们将匹配 所有大写字符,而不仅仅是英文字符(A-Z)。
答案 2 :(得分:2)
未测试:
my %abbr;
open (my $input, "<", "filename")
|| die "open: $!";
for ( < $input > ) {
while (s/([A-Z][A-Z]+)//) {
$abbr{$1}++;
}
}
修改它以寻找至少两个连续的大写字母。
答案 3 :(得分:2)
#!/usr/bin/perl
use strict;
use warnings;
my %abbrs = ();
while(<>){
my @words = split ' ', $_;
foreach my $word(@words){
$word =~ /([A-Z]{2,})/ && $abbrs{$1}++;
}
}
# %abbrs now contains all abreviations