2012-04-20 2 views
2

У меня есть строка и вы хотите получить ее часть. Предположим, что у меня есть строка, скажем, «установить помощь ODU4-4-3». Я хочу извлечь из него только ODU. В то время как шаблон строки не фиксирован. Это может быть как ODU, ODU4, ODUX. Я не получаю, как извлечь этуRegexp in Perl/TCL

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

Выход

value is ODU4 

мне нужно значение, чтобы быть ODU только тогда картина строка может измениться. Это может быть только ODU-4-3 или может идти ODU4-4-3.

+0

Какой диапазон значений может ODU взять? Модели – Scroog1

+0

похожи на ODU-9-1, STS-9-1, STS3C-9-1, ODU4-9-1. Проблема ODU может быть ODU, или некоторое число может быть привязано к ней на основании требования. – Nitesh

+0

Nitesh, было бы неплохо, если бы вы упоминали все случаи ODU. –

ответ

2

Версия @ M42 «s ответ, который возвращает все матчи:

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

снова ODU не исправлен. Он может идти до любого числа алфавитов, за которым следует число или нет. – Nitesh

+0

Вопрос в том, что строка есть как шаблон, описанный мной. Я хочу взять только алфавиты в первом шаблоне – Nitesh

+0

Это не будет соответствовать 'STS3C-9-1' – Toto

1

Как насчет:

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

для любой длины больше, чем 0 и нечувствительны к регистру, используйте

$aid =~ /([a-zA-Z]+).*?-\d-\d/; 
+0

thats намного лучше. Спасибо – Nitesh

+0

намного лучше – Nitesh

+0

@Nitesh: Добро пожаловать. – Toto

1

Если вы хотите только алфавитов в odu, тогда это должно сделать трюк

$aid =~ /([[:alpha:]]+)/; 
+0

отлично. но как это работает. Будет ли это извлекать все aplhabets в строке или мы можем использовать это как /([:alpha:]).*-\d-\d/ – Nitesh

+0

Работа - это весело, если я получаю поддержку ур ..... ..... – Nitesh

+0

проверьте ** man grep ** и найдите ** alpha ** для более подробного объяснения классов символов. Если вас не интересуют детали после ODU, тогда это должно быть сделано **/([[: alpha:]] +). */** – tuxuday

3

и Tcl:

if {[regexp {^[[:alpha:]]+} $string letters]} { 
    puts $letters 
} 
Смежные вопросы