2012-10-26 2 views
3

У меня есть набор строк, которые я хотел бы разобрать в MATLAB 2012, что все они имеют следующий формат:MATLAB 2012 регулярное выражение

string-int-int-int-int-string 

я хотел бы, чтобы срывать третье число (остальные «не заботятся»), но я не использовал MATLAB в возрасте и нуждался в обновлении регулярных выражений. Я попытался использовать регулярное выражение '(.*)-(.*)-(.*)-\d-(.*)', но не кубики. Я проверил MATLAB regexp page, но не смог выяснить, как применить эту информацию к этому делу.

Кто-нибудь знает, как я могу получить желаемый результат? Если да, не могли бы вы объяснить, какое выражение вы используете для получения этого результата, чтобы другие могли применить ответ к своей уникальной ситуации?

Заранее благодарен!

ответ

5
str = 'XyzStr-1-2-1000-56789-ILoveStackExchange.txt'; 

[tok] = regexp(str, '^.+?-.+?-.+?-(\d+?)-.+?-.+?', 'tokens'); 

tok{:} 
ans = 
    '1000' 

Update

Объяснение, по запросу.

  • ^ - «Якорь» или начало матча.
  • .+? - Подстановочный матч, один или несколько, не жадные.
  • - - Литеральная черта/дефис.
  • (\d+?) - Цифры соответствуют одному или нескольким, не жадным, захваченным в токен.
+0

Я собирался чтобы иметь то же самое .. :) – Anirudha

+0

@ Fake.It.Til.U.Make.It - У вас было это в первую очередь. Я просто хотел дать ему фактический код, и это было трудно сделать в поле комментариев. +1 к вашему ответу. –

+0

Очень полезно - спасибо! Для будущих читателей может оказаться полезным добавить некоторые комментарии о том, что делает каждый маленький подраздел регулярного выражения. – user1205577

5
^.*?-.*?-.*?-(\d+)-.*?-.*?$ 

ИЛИ

^(?:[^-]*?-){3}(\d+)(?:.*?)$ 

Group1 теперь содержит ваши необходимые данные

+0

Я пробовал 'регулярное выражение '(*) -. *? int по какой-то причине. Какова причина выражения, которое вы здесь рекомендуете? то есть, что делает каждая штука? – user1205577

+1

@ user1205577 всякий раз, когда вы используете круглые скобки. Все, что захвачено в этой скобке, фиксируется в группе. В этом случае я использовал (\ d +) для захвата всех цифр, которые вы хотите – Anirudha

+2

@ user1205577 - Ваше оригинальное выражение было «жадным» ", то есть' '. *' 'будет« есть »все, включая тире. Его выражение «неживое», т. Е. ''. *? '', 'Eat' _just enough_, чтобы соответствовать следующей тире. Его регулярное выражение должно было работать, поэтому вы должны разместить больше своего кода ... здесь что-то не так. –

Смежные вопросы