문자열에서 텍스트 추출안녕,
가능한 경우 문자열에서 특정 텍스트를 추출하고 싶습니다.
\\swirt.misc@CAS-K-CLERK\K10447-Wit_OG lo hi TT-YYT (CTL1083.1)_172-7-10053 -303
\\swirt.misc@CAS-K-CLERK\K10445-Wit_OG lo hi ES WERT (CIL0858.1)_172-7-10046-600
\\swirt.misc@CAS-K-CLERK\K10437-Wit_OG lo hi TT-YYT (CTL1077.1)_172-7-10053-303
\\swirt.misc@CAS-K-CLERK\K10420-Wit_OG lo hi ES TRTR (CMA0851.1)_172-7-10047-600
\\swirt.misc@CAS-K-CLERK\K10377-Wit_OG_lo hi_ES_SI (CMS0499.1)_ 172-7-10041-600
\\swirt.misc@CAS-K-CLERK\K10451-Wit_OG lo hi TT-YYT (CTL1078
\\swirt.misc@CAS-K-CLERK\K10468-Wit_OG lo hi YYT DEV-020856(CTLR1073
\\swirt.misc@CAS-K-CLERK\K10022 -Wit_OG lo hi YYT DEV-020414(CTLR0999.1)
\\swirt.misc@CAS-K-CLERK\K10030-Wit_OG lo hi TT-YYT(CTL1008.1)
위에서 ID를 추출하고 싶습니다.
CTL1083.1
CIL0858.1
CTL1077.1
CMA0851.1
CMS0499.1
CTL1078
CTLR1073
CTLR0999.1
CTL1008.1
도움을 주시면 감사하겠습니다.
감사 해요,
토마스
스크립팅Re: 문자열에서 텍스트 추출( 및 )를 구분 기호로 사용하여 WORDS 기능을 사용합니다.반환된 목록에서 두 번째 요소를 사용합니다.아래 코드를 실행하고 로그 창에서 출력을 확인하십시오.
dt = New Table( "Test Words", Add Rows( 9 ),
New Column( "Column 1", Character, "Nominal",
Set Values(
{
"\\swirt.misc@CAS-K-CLERK\K10447-Wit_OG lo hi TT-YYT (CTL1083.1)_172-7-10053 -303",
"\\swirt.misc@CAS-K-CLERK\K10445-Wit_OG lo hi ES WERT (CIL0858.1)_172-7-10046-600",
"\\swirt.misc@CAS-K-CLERK\K10437-Wit_OG lo hi TT-YYT (CTL1077.1)_172-7-10053-303",
"\\swirt.misc@CAS-K-CLERK\K10420-Wit_OG lo hi ES TRTR (CMA0851.1)_172-7-10047-600",
"\\swirt.misc@CAS-K-CLERK\K10377-Wit_OG_lo hi_ES_SI (CMS0499.1)_ 172-7-10041-600",
"\\swirt.misc@CAS-K-CLERK\K10451-Wit_OG lo hi TT-YYT (CTL1078",
"\\swirt.misc@CAS-K-CLERK\K10468-Wit_OG lo hi YYT DEV-020856 (CTLR1073",
"\\swirt.misc@CAS-K-CLERK\K10022 -Wit_OG lo hi YYT DEV-020414 (CTLR0999.1)",
"\\swirt.misc@CAS-K-CLERK\K10030-Wit_OG lo hi TT-YYT (CTL1008.1)"}
),
Set Display Width( 583 )
)
);
for (i = 1, i <= nrows(dt), i++,
one_value = dt:column 1[i];
word_list = words(one_value, "()");
print(word_list[2]);
);Re: 문자열에서 텍스트 추출의 솔루션 @pmroz 매우 견고합니다, 멋집니다!
약간 다른 접근 방식은 데이터 테이블에서 수식을 사용하는 것입니다.

시작 구분 기호의 위치는 "포함" 인수로 찾을 수 있습니다.
Contains(:text, "(")
끝 구분 기호의 위치는 같은 방식으로 위치할 수 있습니다.
Contains( :text, ")" )
모호하지만 정말 재미있는 인수인 "munger"를 사용하여 구분 기호 위치 사이의 문자열을 추출할 수 있습니다.
이 경우 우리는 구분자 문자 뒤의 문자열을 원하고 끝 구분자 문자보다 먼저 끝나기 때문에 시작 부분에 1을 더하고 끝 부분에서 뺍니다.
이 경우 munger에 대한 함수는 인수, 전체 텍스트, 시작 위치, 반환할 문자 수를 사용합니다. Munger는 찾기 및 바꾸기와 같은 다른 흥미로운 작업도 수행할 수 있습니다.
Munger( :text, :start + 1, (:stop - :start) - 1 )
이 모든 것을 하나의 공식으로 정리하면 다음과 같습니다.
Munger(
:text,
Contains( :text, "(" ) + 1,
(Contains( :text, ")" ) - Contains( :text, "(" )) - 1
)
Re: 문자열에서 텍스트 추출나는 사용한다 서브스트 유사한 효과를 위해.
for (i = 1, i <= nrows(dt), i++,
one_value = dt:column 1[i];
start = contains(one_value, "(") + 1;
end = contains(one_value, ")") - 1;
len = end - start + 1;
result = substr(one_value, start, len);
print(result);
);Re: 문자열에서 텍스트 추출정규 표현식에 대한 경우 ...
Names Default to Here( 1 );
// make list of example original strings
sample = "\\swirt.misc@CAS-K-CLERK\K10447-Wit_OG lo hi TT-YYT (CTL1083.1)_172-7-10053 -303
\\swirt.misc@CAS-K-CLERK\K10445-Wit_OG lo hi ES WERT (CIL0858.1)_172-7-10046-600
\\swirt.misc@CAS-K-CLERK\K10437-Wit_OG lo hi TT-YYT (CTL1077.1)_172-7-10053-303
\\swirt.misc@CAS-K-CLERK\K10420-Wit_OG lo hi ES TRTR (CMA0851.1)_172-7-10047-600
\\swirt.misc@CAS-K-CLERK\K10377-Wit_OG_lo hi_ES_SI (CMS0499.1)_ 172-7-10041-600
\\swirt.misc@CAS-K-CLERK\K10451-Wit_OG lo hi TT-YYT (CTL1078
\\swirt.misc@CAS-K-CLERK\K10468-Wit_OG lo hi YYT DEV-020856 (CTLR1073
\\swirt.misc@CAS-K-CLERK\K10022 -Wit_OG lo hi YYT DEV-020414 (CTLR0999.1)
\\swirt.misc@CAS-K-CLERK\K10030-Wit_OG lo hi TT-YYT (CTL1008.1)";
sample = Words( sample, "\!U000D" );
// Show( sample );
n = N Items( sample );
id = List();
// iterate over list and return target strings
For Each( { string }, sample,
If( Contains( string, ")" ),
Insert Into( id, Regex( string, "(.+\()(.+)(\).*)", "\2" ) ),
Insert Into( id, Regex( string, "(.+\()(.+)", "\2" ) )
);
);
Show( id );Re: 문자열에서 텍스트 추출나는 그러한 문자열 추출을 위한 "Word()" 함수를 좋아합니다.
Names Default To Here( 1 );
dt = New Table( "Test Words",
Add Rows( 9 ),
New Column( "Column 1",
Character,
"Nominal",
Set Values(
{"\\swirt.misc@CAS-K-CLERK\K10447-Wit_OG lo hi TT-YYT (CTL1083.1)_172-7-10053 -303",
"\\swirt.misc@CAS-K-CLERK\K10445-Wit_OG lo hi ES WERT (CIL0858.1)_172-7-10046-600",
"\\swirt.misc@CAS-K-CLERK\K10437-Wit_OG lo hi TT-YYT (CTL1077.1)_172-7-10053-303",
"\\swirt.misc@CAS-K-CLERK\K10420-Wit_OG lo hi ES TRTR (CMA0851.1)_172-7-10047-600",
"\\swirt.misc@CAS-K-CLERK\K10377-Wit_OG_lo hi_ES_SI (CMS0499.1)_ 172-7-10041-600",
"\\swirt.misc@CAS-K-CLERK\K10451-Wit_OG lo hi TT-YYT (CTL1078",
"\\swirt.misc@CAS-K-CLERK\K10468-Wit_OG lo hi YYT DEV-020856 (CTLR1073",
"\\swirt.misc@CAS-K-CLERK\K10022 -Wit_OG lo hi YYT DEV-020414 (CTLR0999.1)",
"\\swirt.misc@CAS-K-CLERK\K10030-Wit_OG lo hi TT-YYT (CTL1008.1)"}
),
Set Display Width( 583 )
)
);
For( i = 1, i <= N Rows( dt ), i++,
Print( Word( 2, dt:column 1[i], "()" ) )
);Re: 문자열에서 텍스트 추출@pmroz , 귀하의 코드는 항상 제 것보다 훨씬 덜 무모해 보입니다. )
Substring(substr)은 보다 직접적인 접근 방식입니다. 나는 munger의 좋은 사례를 거부할 수 없습니다.
Craig Hales는 아마도 패턴 매칭을 사용하여 훨씬 더 효율적인 접근 방식을 가지고 있을 것입니다. 커뮤니티 페이지나 그의 블로그 페이지에 이미 몇 가지 예가 있다고 확신합니다.
Re: 문자열에서 텍스트 추출JMP에서 빵 한 덩어리를 자르는 방법은 정말 많습니다.
Re: 문자열에서 텍스트 추출아주 좋습니다. 모든 제안이 마술처럼 작동합니다.
나는 내 스크립트에서 Munger를 사용했고 완벽하게 작동합니다.
정말 감사합니다
토마스