\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글자보다 긴 단어가 없었기 때문에 작동했습니다. 네 글자로 된 예는 더 복잡합니다. 단어 경계를 일치시키기 위해 \b를 사용하고 있습니다. 경계 테스트 없이, 재빨리 네 글자로 된 단어로 보일 것입니다. format 인수는 역참조 \0, \1 및 \2를 사용하여 네 줄의 텍스트를 모두 생성했습니다. \1은 첫 번째 괄호 그룹이고 \2는 두 번째 그룹입니다. \0은 여전히 일치하는 전체 텍스트입니다. ( \!n은 개행 문자입니다. 모든 공백이 출력의 일부가 되므로 모두 함께 실행됩니다. )
Regex는 기본적으로 대소문자를 구분합니다. 이 예는 일치하지 않고 누락된 값을 반환합니다.
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일 업데이트: 새 커뮤니티의 서식(및 그림)을 복구했습니다.
@지안파올로 :
당신의 관찰은 완전히 정확합니다. 내 실수이자 실수였다. 게시한 스크립트가 정확합니다.
도움을 주셔서 대단히 감사합니다.
FOR Cicle에서 "ColsList" 대신 "Colnames"를 사용하면 스크립트가 작동한다고 생각합니다.
전역 지우기 ();
로그 지우기 ();
dt = 현재 데이터 테이블 ();
ColNames = dt << 열 이름 가져오기 ( "끈" );
을 위한 ( 나는 = 1 , 나는 <= N개 항목 ( ColNames ), i++,
만약에 ( ! 누락 ( 정규식 ( 숯 ( ColNames[i] ), "^[0-9]" ) ),
열 = 열 (dt,i); // 여기서 dt는 데이터 테이블입니다.
ColName = 열 << 이름 얻기 ;
새 이름 = 연결 ( "*" , ColName );
열 << 이름 설정 ( 새 이름 );
)
);
나는 jmp 스크립팅의 초보자입니다... 내가 틀렸다면 용서하세요
정규식을 다음으로 변경해야 할 수도 있습니다.
<SPAN class="token string">"^[0-9]"</SPAN>
문자열의 시작 부분에서 문자를 찾도록 강제합니다. 그렇지 않으면 Column7과 같은 이름이 일치합니다.
@지안파올로 ,
다음은 이러한 문제를 해결하는 한 가지 방법입니다. 제 제안은 이러한 질문을 "토론"에 게시하고 블로그 링크를 제공하는 것입니다. 커뮤니티에서 귀하의 질문에 더 빠르게 답변할 수 있습니다.
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,
내 작업을 적용하는 데 매우 흥미로운 '정규식' 기능을 발견했습니다.
열 이름이 숫자로 시작할 때 문자를 삽입하고 싶습니다.
예: "00001 데이터 번호 1"인 경우
그런 다음: "*00001 DATA no 1"(이 경우 ' * ' 추가)
if: "데이터 번호 1"
"DATA no 1"(이 경우 변경 사항 없음)
정규식을 사용할 수 있습니까? 도와주세요?
정말 감사합니다
차오 지안파올로