\1\1\1\1\1
JSL REGEX 함수 정규식 기본값은 "\0"인 형식 인수가 있습니다. \0은 일치하는 모든 텍스트에 대한 역참조입니다.
sentence = "the quick brown fox jumped over the lazy dog";
regex( sentence, "\w{6,6}", "\0"); // look for exactly 6 word characters
"뛰어 올랐다"
다른 역참조는 괄호로 표시됩니다.
sentence = "the quick brown fox jumped over the lazy dog";
regex( sentence, "(\b\w{4,4}\b).*(\b\w{4,4}\b)",
"this part: \0\!nhas this: \1\!nand this: \2\!nfour letter words");
"이 부분: 게으른 이상
이: 이상
그리고 이건: 게으른
네 글자 단어"
첫 번째 6글자 예는 6글자보다 긴 단어가 없었기 때문에 효과가 있었습니다. 4글자 단어의 예는 더 복잡합니다. 단어 경계를 일치시키기 위해 \b를 사용하고 있습니다. 경계 테스트 없이, 빨리 네 글자로 된 단어인 것 같습니다. 형식 인수는 역참조 \0, \1 및 \2를 사용하여 네 줄의 텍스트를 모두 생성했습니다. \1은 괄호 안에 있는 첫 번째 그룹이고 \2는 두 번째 그룹입니다. \0은 여전히 전체 텍스트와 일치합니다. ( \!n은 개행 문자입니다. 모든 공백이 출력의 일부가 되므로 모두 함께 실행됩니다. )
정규식은 기본적으로 대소문자를 구분합니다. 이 예는 일치에 실패하고 누락된 값을 반환합니다.
sentence = "the quick brown fox jumped over the lazy dog";
regex( sentence, "DOG");
.
이에 대한 옵션이 있습니다.
sentence = "the quick brown fox jumped over the lazy dog";
regex( sentence, "DOG", "\0", IGNORECASE);
"개"
그리고 형식 문자열에는 대소문자를 변경하는 사양이 있습니다.
sentence = "tHe QUick BROWN fox jUMPED over the lAZy DoG";
regex( sentence, "\b(\w)(\w*)\b", "\U\1\E\L\2\E", IGNORECASE, GLOBALREPLACE);
"빠른 갈색 여우가 게으른 개를 뛰어넘었습니다"
정규식은 비정형 대소문자 입력을 초기 대문자로 만들었습니다. 형식 문자열에는 대문자를 시작하는 \U, 소문자를 시작하는 \L, 대소문자 변경을 끝내는 \E가 포함됩니다.
정규식 대체 문자열 문법(Perl과 유사)
- \L - \E까지 출력을 소문자로 시작합니다.
- \U - \E까지 출력을 대문자로 시작합니다.
- \E - 대소문자 및 인용 수정 끝
- \l - (소문자 L) - 소문자 다음 문자
- \u - 대문자 다음 문자
- \0 ... \999 - 패턴에서 일치하는 표현식 중 하나로 대체
- \e - 더 많은 숫자가 이어지는 경우 숫자의 끝: \7\e123은 표현식 7 뒤에 123이 오는 것을 의미합니다(JMP 확장)
- \\ - 단일 백슬래시
버그 발견: 현재는 작동하지 않지만 12.2 유지 관리에서는 작동합니다(IGNORECASE 및 GLOBALREPLACE와의 잘못된 상호 작용과 문자열 끝의 길이가 0인 일치로 인해 루프가 발생함).
sentence = "tHe QUick BROWN fox jUMPED over the lAZy DoG";
regex( sentence, "\b(\w*)\b", "\L\u\1", IGNORECASE, GLOBALREPLACE);
검색 문자열에는 대소문자별 문자가 없으므로 다음과 같이 작동합니다.
sentence = "tHe QUick BROWN fox jUMPED over the lAZy DoG";
regex( sentence, "\b(\w*)\b", "\L\u\1", GLOBALREPLACE);
"빠른 갈색 여우가 게으른 개를 뛰어넘었습니다"
\w* 대신 \w+를 사용하면 단어에 최소한 하나의 문자가 있다고 주장하여 문제를 피할 수 있습니다.
테네시 왈츠가 앞쪽에 있습니다.
2017년 2월 4일 업데이트: 새 커뮤니티의 서식(및 그림)이 수정되었습니다.
@gianpaolo :
당신의 관찰은 완전히 정확합니다. 제 실수이자 실수였습니다. 게시 한 스크립트가 정확합니다
도움을 주셔서 정말 감사합니다.
FOR Cicle에서 "ColsList" 대신 "Colnames"를 사용하면 스크립트가 작동한다고 생각합니다.
전역 지우기 ();
로그 지우기 ();
dt = 현재 데이터 테이블 ();
ColNames = dt << 열 이름 가져오기 ( "끈" );
을 위한 ( 나는 = 1 , 나는 <= N개 품목 ( ColNames ), i++,
만약에 ( ! 누락 ( 정규식 ( 숯 ( ColNames[i] ), "^[0-9]" ) ),
콜 = 열 (dt,i); // dt는 데이터 테이블입니다.
ColName = 열 << 이름 가져오기 ;
새이름 = 연결 ( "*" , 열이름 );
열 << 이름 설정 (새이름);
)
);
저는 jmp 스크립팅 초보자입니다... 제가 틀렸다면 용서해주세요
정규식을 다음으로 변경해야 할 수도 있습니다.
<SPAN class="token string">"^[0-9]"</SPAN>
문자열의 시작 부분에서 문자를 찾도록 강제합니다. 그렇지 않으면 Column7과 같은 이름이 일치합니다.
@gianpaolo ,
다음은 문제를 해결하는 한 가지 방법입니다. 제가 제안하는 것은 "토론"에 그러한 질문을 게시하고 블로그 링크를 제공하는 것입니다. 커뮤니티에서는 귀하의 질문에 더 빠르게 답변할 수 있습니다.
Clear Globals(); Clear Log();
dt = Current Data Table();
ColNames = dt << Get Column Names("String");
for( i = 1 , i <= N Items(ColsList) , i++,
If(!IsMissing(Regex(Char(ColsList[i]),"[0-9]")),
Col = Column(dt,i); // where dt is your data table
ColName = Col << Get Name;
NewName = Concat("*",ColName);
Col << Set Name(NewName);
);
);
예제 실행을 위해 제가 만든 데이터 테이블(dt) 스크린샷을 제공합니다.
안녕하세요 Craige_Hales님,
나는 내 작업을 적용하는 데 '정규식' 기능이 매우 흥미롭다는 것을 알았습니다.
내 스크립트의 Comuns 이름을 세부적으로 수정해야 합니다. 열 이름이 숫자로 시작할 때 문자를 삽입하고 싶습니다.
예: "00001 DATA no 1"인 경우
그러면 다음과 같습니다: "*00001 DATA no 1"(이 경우에는 ' * '를 추가했습니다)
if is: "데이터 번호 1"
그러면 다음과 같습니다: "DATA no 1"(이 경우 변경 사항 없음)
정규식을 사용할 수 있습니까? 도와주세요?
정말 감사합니다
챠오 지안파올로