부분 문자열을 사용하여 문자열 검색<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />모두,
부분 문자열을 검색 기준으로 사용하여 문자열 일치를 검색하려고 합니다. 아래에 표시된 것처럼 여러 가지 방법을 시도했습니다. RegEx 또는 Pat Match를 사용하여 이 작업을 수행하는 더 좋은 방법이 있어야 한다고 생각하지만 올바른 방법을 찾을 수 없습니다. 도움을 주시면 감사하겠습니다.
예를 들어 항공 교통 샘플 데이터 테이블을 사용하고 있습니다.
// 방법 # 1 Pat Match 사용
dt = 현재 데이터 테이블();
ColNames = dt << 열 이름 가져오기();
일치 = 목록();
sp = Pat Span("ID");
Pat Match(ColNames,sp>>일치);
성냥;
// 일치하는 항목이 없습니다. 그러나 동일한 코드에서 ID 자체가 열 이름인 경우에는 작동합니다. 그래서 검색 문자열의 일부를 사용하여 검색을 수행하는 방법을 알고 싶습니다.
// 방법 # 2 Contains() 사용
for( i=1, i<= N 항목(ColNames),i++,
If(Contains(열 이름 ,"ID")== 1,
삽입 대상(일치,i);
);
);
최상의
오늘
Re: 부분 문자열을 사용하여 문자열 검색명시적인 루프처럼 들리면 더 쉽고 명확해질 것입니다.
for( icol = 1, icol <= nitems(colnames), icol++,
// char(colnames)에 정규식을 사용합니다. ) 필요한 일치 항목을 얻으면 이 루프에서 벗어나십시오.
)
열 이름에는 쉼표가 있고 icol 인덱스가 필요하므로 정규식은 훨씬 간단할 수 있습니다.이것은 테스트되지 않았지만 다음과 같습니다.
if( ! ismissing( regex( char(colnames[ icol ]), "ID" ) ), break() );
이름의 ID에 대해 각 icol을 테스트합니다.일치가 실패하면 정규식은 누락을 반환합니다.
Re: 부분 문자열을 사용하여 문자열 검색크레이지@JMP :
제공하신 솔루션이 작동하는 동안 2가지 후속 질문이 있습니다.
1. 일치하는 항목이 발견되면 어떻게 색인을 얻습니까?
2. 열 이름이 다음과 같은 경우 - 제 경우에는 그렇습니다.
이름( "iPhone 7, 캘리포니아, 예" ) - ColNames
이름(\!" 아이폰 7 , 캘리포니아 , 예 \!") - 콜스트링
조언을 부탁드립니다.
최상의
우데이
Re: 부분 문자열을 사용하여 문자열 검색아마도 다음과 같을 것이다:
dt = 현재 데이터 테이블();
ColNames = dt << 열 이름 가져오기();
콜스트링 = 숯 (열 이름);
match = regex(colstrings, "[{,]\s*([^{,}]*ID[^{,}]*)[,}]", "\1");
표시(일치);
Match = "항공편 ID";
이는 쉼표나 중괄호를 사용하지 않는 열 이름에 따라 다릅니다.char 함수는 이름 목록을 문자열로 변환합니다.
{항공사, 항공사 코드, 항공편 번호, 꼬리 번호, 항공편 ID, 이벤트, 공항, 시간,
원래 시간, 경도, 위도}
된다
"{항공사, 항공사 코드, 항공편 번호, 꼬리 번호, 항공편 ID, 이벤트, 공항, 시간, 원래 시간, 경도, 위도}"
나는 이것을 위해 정규식을 선택했습니다. 왜냐하면 ... 음, 어느 쪽이든 아름답지 않을 것이기 때문입니다.정규식 패턴 분석:
"[{,] 여는 중괄호 또는 쉼표
\s* 선택적 공백
([^{,}]*ID[^{,}]*) 외부 괄호는 \1 일치입니다(자세한 내용은 아래 참조).
[,}]" 쉼표 또는 닫는 중괄호
\1 부분을 분해합니다.
[^{,}]* 중괄호나 쉼표가 아닌 0개 이상의 문자
열 이름에서 찾고 있는 단어를 ID로 지정하세요.
[^{,}]* 중괄호나 쉼표가 아닌 0개 이상의 문자
정규식의 세 번째 인수인 "\1"은 첫 번째 열린 괄호를 사용하여 대체 텍스트를 식별한다는 의미입니다.