cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
The Discovery Summit 2025 Call for Content is open! Submit an abstract today to present at our premier analytics conference.
See how to use to use Text Explorer to glean valuable information from text data at April 25 webinar.
Choose Language Hide Translation Bar
View Original Published Thread

문자열 옆의 숫자 추출

AprioriFish3134
Level II

안녕하세요, 문자열 옆에 있는 숫자를 추출하는 데 도움을 줄 수 있는 사람이 있나요?

아래에 표시된 열 1이 있고 "HFA"(열 2)에 인접한 숫자를 추출할 것으로 예상됩니다.

다음 JSL을 시도했지만 예상한 열2를 얻을 수 없습니다.

Num( Regex( :열 1, "(\d\d\d)HFA | HFA(\d\d\d)", "\1" ) )

열 1열 2
400HFA isa300400
isa300 HFA400400

질문을 고려해 주셔서 감사합니다.

원래 English (US) 로 작성된 이 게시물은 귀하의 편의를 위해 번역되었습니다. 답장을 보내면 English (US) 로 다시 번역됩니다.

1 ACCEPTED SOLUTION

Accepted Solutions
ngambles
Level III

Re: 문자열에 인접한 숫자 추출

작은 예제 세트가 주어지면 다음 공식이 작동합니다.

Num( Regex( :column1, "(\d*)HFA(\d*)", "\1\2" ) )

이 솔루션은 "400HFA300"과 같은 인스턴스가 있는 경우 문제가 발생합니다.400300을 반환합니다.

7 REPLIES 7
ngambles
Level III

Re: 문자열에 인접한 숫자 추출

작은 예제 세트가 주어지면 다음 공식이 작동합니다.

Num( Regex( :column1, "(\d*)HFA(\d*)", "\1\2" ) )

이 솔루션은 "400HFA300"과 같은 인스턴스가 있는 경우 문제가 발생합니다.400300을 반환합니다.

원래 English (US) 로 작성된 이 게시물은 귀하의 편의를 위해 번역되었습니다. 답장을 보내면 English (US) 로 다시 번역됩니다.

Re: 문자열에 인접한 숫자 추출

안녕하세요 Ngambels님,

 

당신의 도움을 주셔서 대단히 감사합니다. 문제가 해결되었습니다.

 

나는 시도했다

"(\d*)HFA(\d*)"

그러나 분명히 나는 놓쳤습니다 (나는 \1과 \2를 모두 사용할 수 있고 사용해야한다는 것을 몰랐습니다)

"\1\2"

 

나는 당신과 이 토론을 통해 새로운 것을 배웠습니다.

 

다시 한 번, 대단히 감사합니다!

원래 English (US) 로 작성된 이 게시물은 귀하의 편의를 위해 번역되었습니다. 답장을 보내면 English (US) 로 다시 번역됩니다.

jthi
Super User

Re: 문자열에 인접한 숫자 추출

어떤 이유로 문제를 해결해야 하는 경우 @ngambles 언급했듯이 한 가지 매우 간단한 방법은 Regex 대신 Regex Match를 사용하는 것입니다.

Names Default To Here(1);
a = "400HFA isa300";
b = "isa300 HFA400";
c = "400HFA300";
d = "400HF300";

rgx_pattern = "(\d*)(?:HFA)(\d*)";
show(Regex Match(a, rgx_pattern));
show(Regex Match(b, rgx_pattern));
show(Regex Match(c, rgx_pattern));
show(Regex Match(d, rgx_pattern));

정규식 일치는 캡처된 그룹 목록을 반환하므로 몇 가지 추가 검사가 필요합니다.

원래 English (US) 로 작성된 이 게시물은 귀하의 편의를 위해 번역되었습니다. 답장을 보내면 English (US) 로 다시 번역됩니다.

Craige_Hales
Super User

Re: 문자열에 인접한 숫자 추출

감사 @AprioriFish3134 원래 문제를 지적하기 위해(\2 없음), @ngambles 좋은 솔루션을 위해.

 

더 많은 수준의 중첩 괄호 또는 예제의 순차 괄호가 필요한 경우 왼쪽에서 오른쪽으로 여는 괄호를 세어 역참조 번호를 찾으면 됩니다. 사용하지 않은 대안에 대한 역 참조는 빈 문자열입니다.

 

Regex( "abac", "(((a)|(b)|(c))(c))+", "1=\1 2=\2 3=\3 4=\4 5=\5 6=\6" )

"1=ac 2=a 3=a 4= 5= 6=c"

 

분명하지 않을 수 있는 한 가지: 백 참조도 패턴에서 사용할 수 있습니다. 이것은 선행 및 후행 따옴표 또는 아포스트로피가 일관되게 사용되도록 하는 데 유용할 수 있습니다.

 

Write( Regex( 
 "before 'a \!"b\!" c' after", // before 'a "b" c' after
 "(\!"|')(.*?)\1", // ("|')(.*?)\1
 "\2" 
) )

a "b" c

(\!" 이스케이프는 문자열 안에 따옴표를 넣고 주석은 문자열의 텍스트를 보여줍니다.) 이 예에서 \1 그룹은 " 또는 '와 일치할 수 있고 \2는 \1.

 

그런 식으로 정규식을 작성하는 경우 주석을 사용하십시오! 다음 관리자는 그것을 감사할 것입니다.

원래 English (US) 로 작성된 이 게시물은 귀하의 편의를 위해 번역되었습니다. 답장을 보내면 English (US) 로 다시 번역됩니다.

jthi
Super User

Re: 문자열에 인접한 숫자 추출

정규식을 연습하고 테스트하기에 좋은 곳은 https://regex101.com/ .

undefined

JMP 이스케이프 문자가 제거된 주석은 매우 도움이 되었습니다. 더 복잡한 정규식 패턴을 작성할 때 주석을 추가하기 시작해야 합니다( 이스케이프된 문자의 정규식 문제 )

원래 English (US) 로 작성된 이 게시물은 귀하의 편의를 위해 번역되었습니다. 답장을 보내면 English (US) 로 다시 번역됩니다.

Re: 문자열에 인접한 숫자 추출

안녕 @jthi

 

문제에 대한 대체 솔루션과 정규식에 대한 링크에 대해 대단히 감사합니다.

원래 English (US) 로 작성된 이 게시물은 귀하의 편의를 위해 번역되었습니다. 답장을 보내면 English (US) 로 다시 번역됩니다.

Re: 문자열에 인접한 숫자 추출

안녕 @Craige_Hales ,

 

토론을 풍성하게 해 주셔서 대단히 감사합니다.

 

사실 이전 기사에서 JMP의 정규식에 대해 처음 배웠습니다!
https://community.jmp.com/t5/Uncharted/Regex/ba-p/21008

 

 

원래 English (US) 로 작성된 이 게시물은 귀하의 편의를 위해 번역되었습니다. 답장을 보내면 English (US) 로 다시 번역됩니다.