正则表达式查找在perl中包含至少两个大写字母的字符串

问题描述:

我正在寻找一个匹配特定字符串的正则表达式,该字符串在perl中至少有两个大写字母。我完全卡住解决这个任何指针将不胜感激。正则表达式查找在perl中包含至少两个大写字母的字符串

+1

你申请的任何努力? – 2013-02-28 06:25:19

+0

@Krishna:那不符合'AaaaaB'。 – Blender 2013-02-28 06:27:03

+0

是的。进行更改。 – 2013-02-28 06:30:09

为什么坚持只ASCII字母?

这将匹配任何语言的两个大写字母使用Unicode character properties

/\p{Lu}.*\p{Lu}/ 

\p{Lu}Unicode character property匹配具有小写变体

又见perlretut: More on characters, strings, and character classes

小测试大写字母:

my @input = ("foobar", "Foobar", "FooBar", "FÖobar", "fÖobÁr"); 

foreach my $item (@input) { 
    if ($item =~ /\p{Lu}.*\p{Lu}/) { 
     print $item . " has at least 2 uppercase!\n" 
    } else { 
     print $item . " has less than 2 uppercase!\n" 
    } 
} 

输出:

foobar有不到2个大写!
Foobar有不到2个大写!
FooBar至少有2个大写字母!
FÖobar至少有2个大写!
fÖobÁr至少有2个大写!

尝试使用这样的:

/^.*[A-Z].*[A-Z].*$/

不知道到底你需要什么:

perl -lane 'for(@F){if(/[A-Z]/){$count++ for m/[A-Z]/g}if($count >=2){print $_};$count=0}' 

测试下方

> echo "ABC DEf Ghi" | perl -lane 'for(@F){if(/[A-Z]/){$count++ for m/[A-Z]/g}if($count >=2){print $_};$count=0}' 
ABC 
DEf