Replacing strings with varying length and numbers
조회 수: 3 (최근 30일)
이전 댓글 표시
I want to replace strings in varying length an numeric values.
I know that the regexprep function is very powerfull in modifying strings, but all its syntax is very complex for me.
My strings are structured like this:
'Phase1_525kV_4km_100m_0.5ohm'
Now I want to be able to replace each number and its subsequent unit up to the unterscore symbol.
So I need something that replaces all numbers in front of for exmaple km, but the length of the numeric values in front of the units are not allways the same.
This should also include values for not whole numbers like '0.5ohm' which should also be replaced completele.
What is the right syntax to use for the regexprep function?
thanks
댓글 수: 5
Walter Roberson
2019년 8월 25일
S = 'Phase1_525kV_4km_100m_0.5ohm';
newohm1 = '17';
newohm2 = '0.8';
newS1 = regexprep(S, '(0\.\d|\d+)(?=ohm)', newohm1, 'once')
newS2 = regexprep(newS1, '(0\.\d|\d+)(?=ohm)', newohm2, 'once')
채택된 답변
Stephen23
2019년 8월 25일
>> str = 'Phase1_525kV_4km_100m_0.5ohm';
>> out = regexprep(str,'\d+\.?\d*[a-zA-Z]+','X')
out = Phase1_X_X_X_X
댓글 수: 2
Stephen23
2019년 8월 26일
편집: Stephen23
2019년 8월 26일
"But what if I just want to replace one variable?"
You can specify the unit:
>> str = 'Phase1_525kV_4km_100m_0.5ohm';
>> regexprep(str,'\d+\.?\d*m','X') % replace meters
ans = Phase1_525kV_4km_X_0.5ohm
>> regexprep(str,'\d+\.?\d*ohm','X') % replace ohms
ans = Phase1_525kV_4km_100m_X
Note that for robustness this should be the complete suffix+unit, followed by a lookaround assertion that checks if the following character is '_' or the end of the string, other 'm' can be ambiguously interpreted.
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Characters and Strings에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!