2

私は文字列を持っていて、その一部を取得したいと考えています。「セットエイド ODU4-4-3」という文字列があるとします。そこからODUだけ取りたい。ストリングのパターンは固定されていません。それはODU、ODU4、ODUXのようなものかもしれません。これを取得する方法がわかりません

$aid = "ODU4-9-1";
$aid =~ /(\w)+\d*-\d-\d/;
print " value is $1"

出力

value is ODU4

文字列パターンが変更される可能性があるのに対し、値は ODU のみである必要があります。ODU-4-3 のみの場合もあれば、ODU4-4-3 の場合もあります。

4

4 に答える 4

3

およびTcl:

if {[regexp {^[[:alpha:]]+} $string letters]} {
    puts $letters
} 
于 2012-04-20T10:06:51.003 に答える
2

すべての一致を返す @ M42 の回答のバージョン:

my @allmatches = $aid =~ /([A-Z]{3}).*?\-\d\-\d/;
于 2012-04-20T09:33:44.707 に答える
1

oduでアルファベットだけが必要な場合は、これでうまくいくはずです

$aid =~ /([[:alpha:]]+)/;
于 2012-04-20T09:41:28.670 に答える
1

どうですか:

$aid =~ /([A-Z]{3}).*?-\d-\d/;

長さが 0 より大きく、大文字と小文字を区別しない場合は、次を使用します

$aid =~ /([a-zA-Z]+).*?-\d-\d/;
于 2012-04-20T09:36:10.423 に答える