데이터: 1.000000000000002
, 0.999999999999999
예상 출력: 1.0..02
Matlab 에서 의사 코드를 자르기 위한 다른 속기로 0.9..9
바꿀 수 있습니다...
float_thing=1.0000000000000002; % 0.999999999999999
str=num2str(float_thing,17);
regexprep(str, '[09]{3,}' , 'SOME_lookBehind_thing_here for 0..0/9..9')
- 당신은 플로터를 가지고
float_thing
- 문자열로 변환/변환
num2str
하고 17비트 정밀도를 가집니다. - 정규식을 사용하여
regexprep
문자열을str
일치 항목으로 바꿀 수 있습니다. 즉, 0과 9개의 문자가 모두 3개 이상이고 각각 및 로[09]{3,}
대체할 수 있습니다.0..0
9..9
- 마지막 부분이 가능해야 합니다. 마지막 부분에서는 아마도 lookBehind를 사용해야 할 것입니다.
두 답변 모두 유효합니다.
Stephane의 답변 및 문서를 기반으로 한 Matlab 버전
% http://se.mathworks.com/help/matlab/matlab_prog/tokens-in-regular-expressions.html
p=1.0000000000000002; str=num2str(p,17); regexprep(str, '([09])\1{3,}' , '$1..$1')
% 1.0..02
p=0.9999999999999999; str=num2str(p,17); regexprep(str, '([09])\1{3,}' , '$1..$1')
% 0.9..989
시스템: Linux Ubuntu 16.04
언어: Perl, Matlab, Unix, Bash, Python,...
답변1
무엇에 대해:
$ echo 1.000000000000002, 0.999999999999999, 999.000999000999|
sed 's/\([09]\)\1\{2,\}/\1..\1/g'
1.0..02, 0.9..9, 9..9.0..09..90..09..9
그 [09]
뒤에 ( \1
는역참조캡처[09]
캡처 그룹 \([09]\)
) 2회 이상 반복됩니다. [0-9]\{3,\}
일치 0000
하지만 또한 다르다는 점에 유의하세요 0909
.
모든 정규식 구문이 역참조를 지원하는 것은 아닙니다. sed
do 및 Standard에서 사용하는 표준 기본 정규식확장하다egrep
ERE의 일부 구현은 정규식(예: 의 구현)을 확장으로 지원하지 않습니다. 이것은 / sed
옵션(또 다른 비표준 확장)을 사용할 수 있는 GNU의 경우입니다 .-r
-E
sed -E 's/([09])\1{2,}/\1..\1/g'
Perl과 호환되는 정규식은 다음과 같이 작동합니다.MATLAB 정규 표현식도 지원합니다., 심지어 지원명명된 역참조그림 perl
.