2015-07-27 2 views
3

Представьте себе, я имею строковыеЗакрепить строку в каждую группу подстрок, разделенное множеством символов

Newton = 'kg*m/s^2' 

и мне нужно, чтобы это было:

NewtonMupad = 'unit::kg*unit::m/unit::s^2' 

Есть простой способ обнаружения каждый физический блок и приложить к нему unit::? Можно предположить, что каждая единица разделена либо /, *, либо экспонентом ^2 или ^3.

На данный момент я использовал несколько регулярных выражений, как

x = regexp(Newton ,'*','split') 
y = regexp(Newton ,'/','split') 
z = regexp(Newton ,'^','split') 

и я в состоянии создать строку, мне нужно с петлей. Но мне интересно, есть ли более простое и быстрое решение с использованием Matlab?

+0

Это нормально, если, вместо обнаружения /, * или^2/^ 3, он обнаруживает все небуквы? – Ikaros

+0

, но как бы вы отличались между ними? '^' нуждается в другой обработке, чем '' '' '' '' '' '' 'и, как только эти три могут появиться, я думаю, что решение m.s.s довольно аккуратно. – thewaywewalk

+1

Думал об использовании regexprep, но m.s. ответил передо мной .. – Ikaros

ответ

4

Вы можете использовать regexprep:

>> Newton = 'kg*m/s^2' 
>> regexprep(Newton,'(([a-zA-Z]+)(*|/|\^|$))', 'unit::$1') 

ans = 

unit::kg*unit::m/unit::s^2 
+0

Я думаю, что что-то не хватает, например. '' A/m'' не работает. Но я не понимаю достаточно вашего регулярного выражения, чтобы исправить это самостоятельно. Три математические операторы в этом примере не обязательно присутствуют. – thewaywewalk

+0

@thewaywewalk Я отредактировал свой ответ: «A/m'' работает сейчас –

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