IndexRegEx()는 입력 문자열을 검색하여 지정된 정규 표현식 패턴의 n번째 발생의 시작 위치를 반환합니다. 세 번째 선택적 인수 count가 n 값을 제공하며, 생략 시 1입니다. 문자열의 위치는 왼쪽에서 오른쪽으로 1부터 번호가 매겨집니다. 일치하는 항목이 없으면 함수는 0을 반환합니다.
이 함수는 대/소문자를 구분하는 정규식 연산을 수행합니다. 또는 IndexRegExI() 변형을 사용하여 대/소문자를 구분하지 않는 정규식 작업을 수행할 수 있습니다.
구문:
IndexRegEx
(text, regex [, count])
반환 데이터 유형: 정수
인수
인수
설명
text
정규 표현식을 검색하려는 입력 문자열 텍스트.
regex
입력 문자열을 검색하는 데 사용하는 정규 표현식.
count
일치 항목의 번호. 이 기능은 정규 표현식과 일치하는 항목이 텍스트에서 여러 개 발견될 때 유용합니다. 예를 들어, 네 번째 일치 항목의 위치를 추출하려면 4 값을 지정합니다.
이는 선택적인 인수입니다. 지정하지 않으면 기본값은 1입니다. 오른쪽에서 왼쪽으로 일치 항목을 검색하려면 음수 값을 지정할 수 있습니다.
함수 예
예
결과
IndexRegEx('abc123','[a-z][0-9]+')
3을 반환합니다(첫 번째 일치 항목의 시작 위치).
IndexRegEx('abc123','[a-z][0-9]+',2)
0을 반환합니다(정규식에 두 번째 일치 항목이 없음).
IndexRegEx('ABC123','[a-z][0-9]+')
0을 반환합니다(IndexRegEx()은 대/소문자를 구분함).
IndexRegExI('ABC123','[a-z][0-9]+')
3을 반환합니다. 대/소문자를 구분하지 않는 함수 변형인 IndexRegExI()이 사용됩니다.
사용 시기
이 함수의 사용 사례는 다음과 같습니다.
큰 텍스트 본문 내에서 특정 텍스트 패턴이 나타나는 위치를 식별합니다. 예를 들어, 일련의 긴 이메일 메시지에서 이메일 주소 패턴이 어디에 사용되는지 알고 싶을 수 있습니다.
IndexRegEx()는 특히 고급 데이터 처리에 유용하며 일반적으로 더 길고 복잡한 변환의 첫 번째 단계에서 사용됩니다. 일반적으로 ExtractRegEx(), MatchRegEx(), CountRegEx()와 같은 다른 정규식 함수를 사용하면 문제를 해결하는 것이 더 쉽지만 IndexRegEx()가 이러한 함수가 제공할 수 없는 솔루션을 제공하는 경우가 있을 수 있습니다.
예 1 – ISBN으로 책을 식별하기 위한 스크립트 로드
개요
데이터 로드 편집기를 열고 아래의 로드 스크립트를 새 탭에 추가합니다.
로드 스크립트에는 다음이 포함됩니다.
EmailBody라는 필드에 이메일 메시지 콘텐츠가 들어 있는 테이블 ISBN.
이메일 메시지에서 자연어로 된 모든 13자리 ISBN 코드의 위치를 찾으려고 합니다.
로드 스크립트
SET ISBN_RegEx = 'ISBN[ ]*([0-9]{3})-([0-9]{1})-([0-9]{4})-([0-9]{4})-([0-9]{1})';
ISBN:
LOAD IndexRegEx(EmailText,'$(ISBN_RegEx)',1) AS ISBNCode1,
IndexRegEx(EmailText,'$(ISBN_RegEx)',2) AS ISBNCode2,
IndexRegEx(EmailText,'$(ISBN_RegEx)',3) AS ISBNCode3,
* INLINE `
EmailText
Hi there! I have some books that I'm interested in ordering from your distribution center. Just wanted to make sure they were in stock before I put the order in on the system - do you think you could tell me whether you have these in stock, and how many you might be able to ship us? Thanks! Item 1: ISBN 123-3-1234-1234-0. This is one I've had a really hard time getting a hold of lately. Do you think you would have 5 in stock? If not, can I put a hold on the next 5 you get? Item 2: ISBN 012-2-0123-0123-4 ... This one is not high-priority, but if you have one, I'll take it! Item 3: ISBN 000-1-0123-0123-2. Customers have been requesting this one for a long time, and we haven't had it in stock for years due to it being out of print. Any chance you might have 7 of them? Thanks!
` (delimiter is '/t/';
결과
데이터를 로드하고 시트를 엽니다. 새 테이블을 만들고 다음 필드를 차원으로 추가합니다.
ISBNCode1
ISBNCode2
ISBNCode3
결과 테이블
ISBNCode1
ISBNCode2
ISBNCode3
301
487
588
예 2 – 보조 전화번호를 가진 연락처를 식별하기 위한 차트 표현식
개요
데이터 로드 편집기를 열고 아래의 로드 스크립트를 새 탭에 추가합니다.
로드 스크립트에는 다음이 포함됩니다.
각 회사 웹사이트에서 찾은 회사에 대한 정보가 포함된 BusinessContactInfo라는 테이블입니다.
ContactInfo는 회사 전화번호를 포함하는 필드입니다. 어떤 회사가 여러 개의 전화번호를 가지고 있는지 알아보려고 합니다.
요구 사항:
전화번호는 10자리의 NANP 전화번호여야 합니다.
지역 번호를 괄호로 묶을 수 있도록 하려고 합니다.
전화번호의 각 부분 사이에 하나의 공백이나 하이픈을 허용하려고 합니다.
로드 스크립트
BusinessContactInfo:
Load * Inline `
ID CompanyName ContactInfo
1 Company A (123) 456-7890 (023) 123-4567
2 Company B 0123456790 1357913579 0246802468
3 Company C 234-567-8901
` (delimiter is '\t');