Match() 내에서 Contains()를 사용할 수 있습니까?각 행 값에 특정 문자열이 포함되어 있는지 확인하기 위해 문자 열을 검색한 다음 새 열에 그에 따라 표시기 이름/그룹을 생성해야 합니다(~14개의 특정 문자열을 검색함).중첩된 IF()가 꽤 느릴 것이라고 확신합니다...이전에 정확한 문자열을 일치시키려고 할 때 Match()를 사용했지만 와일드카드를 사용할 수 있습니까?
나는 *와 %를 시도했지만 아무 소용이 없습니다.
Match( :columnOfInterest,
"*StringA*", "String A",
"*StringB*", "String B",
"" )
그런 다음 Match() 내에서 Contains()를 사용하려고 했지만 여전히 운이 없었습니다.
Match( :columnOfInterest,
Contains(:columnOfInterest, "StringA"), "String A",
Contains(:columnOfInterest, "StringB"), "String B",
"" )
포함이 숫자를 반환한다는 것을 알았으므로 > 비교를 추가하고 NUM()으로 래핑도 시도했습니다.
Match( :columnOfInterest,
Contains(:columnOfInterest, "StringA") > 0, "String A",
Contains(:columnOfInterest, "StringB") > 0, "String B",
"" )
그리고
Match( :columnOfInterest,
Num(Contains(:columnOfInterest, "StringA")) > 0, "String A",
Num(Contains(:columnOfInterest, "StringB")) > 0, "String B",
"" )
도움을 주시면 감사하겠습니다.감사해요!
Re: Match() 내에서 Contains()를 사용할 수 있나요?이것은 내 문제를 해결했습니다. 연관 배열을 완전히 잊었습니다. 정말 감사합니다!Re: Match() 내에서 Contains()를 사용할 수 있나요?JMP초보자

연관 배열을 사용하여 다른 문자열에 매핑하려는 문자열의 조회 테이블을 저장할 수 있습니다.
예를 들어 위의 :searchTerms 및 :mappedTerms는 이러한 연관 배열의 키와 값입니다. 아래 코드에서 이 배열은 변수 "lookup"에 할당됩니다. RESULTS 매핑 열의 최종 수식에서 Regex에서 찾은 모든 일치 항목이 조회 배열의 인수 역할을 한다는 것을 알 수 있습니다.
예를 들어 위의 표에서 행 1을 선택합니다. 찾은 결과는 "Integra"이고 매핑된 결과는 "GroupA"인 lookup["Accord"]입니다.
fmlaExpr = Expr(
If( Row() == 1,
lookUp = Associative Array( :searchTerms, :mappedTerms, Empty() );
vals = :searchTerms << get values;
doThis = Expr(
lookUp[Regex( :ColumnOfInterest, Char( "(" || Concat Items( vals, "|" ) || ")" ) )]
);
doThis;
,
doThis
)
);
Eval( Eval Expr( :RESULTS-mapped << set formula( Expr( Parse( Char( NameExpr(fmlaExpr)) ) ) ) ) );
전체 예제 표가 첨부되어 있습니다.
Re: Match() 내에서 Contains()를 사용할 수 있나요?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />패턴이 1개뿐이므로 "\1"은 실제로 차이를 만들지 않습니다. 괄호가 여러 개인 경우 "\1" 또는 "\n"이 있을 수 있습니다. 여기서 n은 <= 패턴 수입니다. JMP 온라인 문서 참조 ==> 정규식
Re: Match() 내에서 Contains()를 사용할 수 있나요?이 모든 것이 의미가 있습니다. 이제 일을 복잡하게 만들려고 합니다...
regex(test,"(ABC|DEF|GHI)","\1")
일치하는 것과 다른 문자열을 반환할 수 있습니까?
- "ABC"가 발견되면 "group1"을 반환하고,
- "DEF"가 발견되면 "group2" 등을 반환합니다.
아니면 정규식으로는 불가능합니까?
Re: Match() 내에서 Contains()를 사용할 수 있나요?PBZ와 Jim 덕분에 Regex()가 훌륭하게 작동하고 이제 스크립팅하는 동안 사용할 수 있는 새로운 도구가 생겼습니다! 매우 감사!
Re: Match() 내에서 Contains()를 사용할 수 있나요?Regex가 방법입니다. 다음은 원하는 다중 일치를 수행하는 매우 간단한 예입니다.찾고 있는 문자열로 확장하면 됩니다.찾은 일치 항목을 반환합니다.
names default to here(1);
test="Answer is ABC";
TheMatch = regex(test,"(ABC|DEF|GHI)","\1");
Re: Match() 내에서 Contains()를 사용할 수 있나요?JMP초보자
나는 조건문을 완전히 피할 것입니다. 더 나은 솔루션은 Regex를 사용하는 것입니다. 예를 들어 검색어가 자동차 모델, "Accord", "Civic" 등이라고 가정하면 다음과 같은 Regex 문을 작성할 수 있습니다. "모든 조건과 일치" . JSL에서 이에 대한 열 수식은 다음과 같습니다.
Regex( :columnOfInterest, "(Accord|Civic|Corolla|Dakota|Integra|Maxima|Ranger|S10)" );
간단한 데모 파일이 첨부되어 있습니다. Regex는 문자열 패턴 일치에서 매우 강력합니다. 부분 단어, 단어 어간 등을 일치시키는 다양한 옵션이 있습니다. 이 도움이 되길 바랍니다!
-PBZ