문자열에서 텍스트 추출안녕,
가능하다면 문자열에서 특정 텍스트를 추출하고 싶습니다.
\\swirt.misc@CAS-K-CLERK\K10447-Wit_OG 안녕하세요 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 안녕하세요 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 안녕하세요 TT-YYT(CTL1078
\\swirt.misc@CAS-K-CLERK\K10468-Wit_OG lo 안녕하세요 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 안녕하세요 TT-YYT(CTL1008.1)
위에서 ID를 추출하고 싶습니다.
CTL1083.1
CIL0858.1
CTL1077.1
CMA0851.1
CMS0499.1
CTL1078
CTLR1073
CTLR0999.1
CTL1008.1
도움을 주시면 감사하겠습니다.
감사해요,
토마스
품질 및 프로세스 엔지니어링Re: 문자열에서 텍스트 추출쉿!@Craige_Hales , 말하지 마세요 @바이런_JMP . 당신은 그의 감정을 정말로 상하게 할 것입니다. (피부가 얇은 것 같아요)
Re: 문자열에서 텍스트 추출패턴 매칭이요? 이건 어때
Names Default to Here(1);
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)";
charSet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.";
idList = {};
Pat Match(sample,"(" + Pat Span(charSet)>>nextID + (")" | "\!r") + Pat Test(Insert Into(idList,nextID);0));
불행하게도 패턴 일치 사용 방법을 배우기 위한 지원 문서가 더 이상 없습니다. 나는 "Regex가 있는데 왜 패턴 일치에 신경쓰나요?"라고 생각했습니다. 그 사람에 대해 더 잘 이해하고 감사하게 될 때까지 (감사합니다. @Craige_Hales !). 엄청나게 빠르고 컴팩트합니다. 위 코드를 설명하자면, 팻 매치 여는 괄호 뒤에 하나 이상의 문자가 오는 것을 찾습니다. 문자 집합 그 뒤에는 닫는 괄호나 캐리지 리턴이 옵니다. 의 결과 팻 스팬 변수에 저장됩니다 다음ID . 패턴을 찾을 때마다 패트 테스트 에 삽입하는 데 사용됩니다. idList . 그만큼 0 끝에 패트 테스트 일치하는 문자열의 마지막 문자 바로 뒤(그러나 다음 문자 앞)부터 입력 문자열을 계속 검색할 수 있습니다. 마지막 진술의 경우 패트 테스트 true(0이 아닌 값)로 평가되면 검색이 종료되고 첫 번째 일치 항목만 반환됩니다.
Re: 문자열에서 텍스트 추출나는 작동할 때 word() 또는 word()의 단순성을 좋아합니다. 나는 멍거에 대해 썼다. 여기 더 이상 그것을 사용하는 방법을 이해하지 못합니다. 제 생각엔 JMP가 JMP에 포함된 이유는 1990년에 Mac에서 사용할 수 있었기 때문입니다. 문자열을 조작하는 좋은 방법의 예였기 때문은 아닙니다.
Re: 문자열에서 텍스트 추출아주 좋아요. 모든 제안이 효과가 있어요.
저는 스크립트에 Munger를 사용했는데 완벽하게 작동했습니다.
정말 감사합니다
토마스
Re: 문자열에서 텍스트 추출JMP에서 빵 한 덩어리를 자르는 방법이 정말 많아요.
Re: 문자열에서 텍스트 추출@pmroz , 귀하의 코드는 항상 내 코드보다 훨씬 덜 무해해 보입니다. )
하위 문자열(substr)은 보다 간단한 접근 방식이므로 Munger에 대한 좋은 사례를 거부할 수 없습니다.
Craig Hales는 아마도 패턴 일치를 사용하여 훨씬 더 효율적인 접근 방식을 가지고 있을 것입니다. 커뮤니티 페이지나 그의 블로그 페이지에 이미 몇 가지 예가 있을 것이라고 확신합니다.
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: 문자열에서 텍스트 추출정규 표현식을 사용하는 경우...(참고: 급하게 작성된 코드를 정리하고 22년 1월 12일에 아래 목록을 교체했습니다.)
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 );
// iterate over list and return target strings
id = List();
For Each( {string}, sample, Insert Into( id, Regex( string, If( Contains( string, ")" ), "(.+\()(.+)(\).*)", "(.+\()(.+)" ), "\2" ) ) );
Show( id );
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: 문자열에서 텍스트 추출의 솔루션 @pmroz 매우 견고하고 좋습니다!
약간 다른 접근 방식은 데이터 테이블에서 수식을 사용하는 것입니다.

시작 구분 기호의 위치는 "Contains" 인수를 사용하여 찾을 수 있습니다.
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: 문자열에서 텍스트 추출( 및 )를 구분 기호로 사용하여 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]);
);