# ExtractRegExGroup - 스크립트 및 차트 함수

ExtractRegExGroup()은 지정된 복합 정규 표현식 패턴을 사용하여 입력 문자열 표현식에서 텍스트를 추출합니다. 함수를 사용할 때, 복합 정규식 내에서 사용할 그룹을 지정합니다. 일치하는 항목이 없으면 함수는 null 값을 반환합니다.

LOAD 문에서 ExtractRegExGroup() 함수를 사용하고 field\_no를 생략하면 함수는 여러 레코드를 반환합니다. ExtractRegExGroup()을 사용하여 여러 필드를 로드하는 경우 모든 조합의 데카르트 곱이 만들어집니다.

이 함수는 대/소문자를 구분하는 정규식 연산을 수행합니다. 또는 ExtractRegExGroupI() 변형을 사용하여 대/소문자를 구분하지 않는 정규식 작업을 수행할 수 있습니다.

구문:

ExtractRegExGroup (text, regex, group [, field\_no])

반환 데이터 유형: 문자열

인수

| 인수 | 설명 |
| --- | --- |
| text | 반환 값에서 추출할 텍스트를 포함하는 문자열 표현식. |
| regex | 텍스트를 추출하는 데 사용하는 정규 표현식. |
| group | 합성 정규 표현식의 경우 그룹의 번호.<br><br>정규 표현식에 그룹이 하나만 포함되어 있는 경우 대신 ExtractRegEx() 함수를 사용합니다. 또는 group 값을 `0`으로 ExtractRegExGroup()을 사용합니다.<br><br>오른쪽에서 왼쪽으로 일치 항목을 검색하려면 음수 group 값을 지정할 수 있습니다. |
| field\_no | 추출할 일치 항목의 번호. 이 기능은 정규 표현식과 일치하는 항목이 텍스트에서 여러 개 발견될 때 유용합니다. 예를 들어, 네 번째 일치 항목을 추출하려면 `4` 값을 지정합니다.<br><br>이는 선택적인 인수입니다. 지정하지 않으면 기본값은 1입니다. |

함수 예

| 예 | 결과 |
| --- | --- |
| `ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',1)` | `abc`를 반환합니다(첫 번째 일치 항목의 첫 번째 그룹). |
| `ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',1,2)` | `def`를 반환합니다(두 번째 일치 항목의 첫 번째 그룹). |
| `ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',2)` | `123`을 반환합니다(첫 번째 일치 항목의 두 번째 그룹). |
| `ExtractRegExGroup('abc123 def456','([a-z]+)([0-9]+)',2,2)` | `456`을 반환합니다(두 번째 일치 항목의 두 번째 그룹). |

## 사용 시기

Extract RegEx()를 사용하면 다른 정보(예: 무료 문자 또는 JSON 문자열)를 포함할 수 있는 데이터에서 격리하려는 정보를 추출할 수 있습니다. 예:

* 텍스트에서 이메일 주소, 전화번호, 계좌 번호 및 기타 정보를 추출합니다.

* 텍스트에서 숫자 값을 추출합니다(예: 통화).

* 텍스트나 숫자형 데이터의 서식을 표준화합니다.

## 예 1 – 트랜잭션 코드를 구문 분석하기 위한 스크립트 로드

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/ExtractRegExGroup.htm)

#### 로드 스크립트 및 결과

개요

데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.

로드 스크립트에는 다음이 포함됩니다.

* 트랜잭션에 대한 정보가 포함된 `Transactions`라는 테이블입니다. 특정 세부 정보는 다음 구문을 사용하여 트랜잭션 코드로 캡처됩니다.

  트랜잭션 연도-트랜잭션 소스(즉, 온라인 또는 매장 구매)-연관된 배포 센터

* 각 세부 정보를 추출하기 위해 여러 개의 새 필드를 만들고 각각 동일한 복합 정규 표현식을 재사용합니다.

요구 사항:

* 연도는 4개 숫자의 조합으로 이루어질 수 있습니다.

* ONLINE 및 INSTORE 값은 트랜잭션 소스에 허용되는 유일한 값입니다.

* 배포 센터에는 정확히 5개의 숫자가 있어야 합니다.

로드 스크립트

```
Transactions:

Load 
	recno() as RecordID,
	ExtractRegExGroup(TransactionCode,'([0-9]{4})-(ONLINE|INSTORE)-([0-9]{5})',0) as TransactionCode_Unparsed,
	ExtractRegExGroup(TransactionCode,'([0-9]{4})-(ONLINE|INSTORE)-([0-9]{5})',1) as TransactionYear,
	ExtractRegExGroup(TransactionCode,'([0-9]{4})-(ONLINE|INSTORE)-([0-9]{5})',2) as TransactionSource,
	ExtractRegExGroup(TransactionCode,'([0-9]{4})-(ONLINE|INSTORE)-([0-9]{5})',3) as TransactionDC,
* Inline `
TransactionCode, Category
2025-ONLINE-60019, Product A
2024-INSTORE-60020, Product B
2025-ONLINE-60018, Product C
2024-ONLINE-60020, Product A
2025-INSTORE-60019, Product B
2025-ONLINE-60017, Product D
`;
```

결과

데이터를 로드하고 시트를 엽니다. 새 테이블을 만들고 다음 필드를 차원으로 추가합니다.

* `RecordID`

* `TransactionCode`

* `TransactionCode_Unparsed`

* `TransactionYear`

* `TransactionSource`

* `TransactionDC`

결과 테이블

| RecordID | TransactionCode | TransactionCode\_Unparsed | TransactionYear | TransactionSource | TransactionDC |
| --- | --- | --- | --- | --- | --- |
| 1 | 2025-ONLINE-60019 | 2025-ONLINE-60019 | 2025 | ONLINE | 60019 |
| 2 | 2024-INSTORE-60020 | 2024-INSTORE-60020 | 2024 | INSTORE | 60020 |
| 3 | 2025-ONLINE-60018 | 2025-ONLINE-60018 | 2025 | ONLINE | 60018 |
| 4 | 2024-ONLINE-60020 | 2024-ONLINE-60020 | 2024 | ONLINE | 60020 |
| 5 | 2025-INSTORE-60019 | 2025-INSTORE-60019 | 2025 | INSTORE | 60019 |
| 6 | 2025-ONLINE-60017 | 2025-ONLINE-60017 | 2025 | ONLINE | 60017 |

이러한 결과는 group 인수를 사용하면 단일 정규 표현식을 여러 작업에 재사용할 수 있음을 보여 줍니다. group 값 0을 사용하는 `TransactionCode_Unparsed` 필드는 이 경우 추가 값을 제공하지 않지만 여기서는 함수를 보여 주기 위해 표시됩니다.

## 예 2 – 비즈니스 연락처 정보를 추출하기 위한 스크립트 로드

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/ExtractRegExGroup.htm)

#### 로드 스크립트 및 결과

개요

데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.

로드 스크립트에는 다음이 포함됩니다.

* 각 회사 웹사이트에서 찾은 회사에 대한 정보가 포함된 `BusinessContactInfo`라는 테이블입니다.

* `ContactInfo`는 회사 이메일 주소와 전화번호를 포함한 무료 문자를 포함하는 필드입니다.

* 각 세부 정보를 추출하기 위해 여러 개의 새 필드를 만들고 각각 동일한 복합 정규 표현식을 재사용합니다.

요구 사항:

* 이메일 주소는 특정 요구 사항과 구문을 충족해야 합니다.

* 전화번호는 10자리의 NANP 전화번호여야 합니다. 지역 번호를 괄호로 묶을 수 있게 하고, 특정 지점에 공백과 하이픈을 허용하려고 합니다.

로드 스크립트

```
BusinessContactInfo:

Load
	ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&*\-_+=~{|}\/.'']{1,50})|(\({0,1}[0-9]{3}\){0,1}[ -]*[0-9]{3}[ -]*[0-9]{4})',1,1) as CompanyEmail,
	ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&*\-_+=~{|}\/.'']{1,50})|(\({0,1}[0-9]{3}\){0,1}[ -]*[0-9]{3}[ -]*[0-9]{4})',2,2) as CompanyPhoneNum,
* Inline `
ID	CompanyName	ContactInfo
1	Company A	Email is: Company1@example.com, Phone number is: (123) 456-7890
2	Company B	Email is: company2@test.com, Phone # is: 0123456790
3	Company C	Email is: company3@placeholder.com, Phone no. is: 234-567-8901

` (delimiter is '\t');
```

결과

데이터를 로드하고 시트를 엽니다. 새 테이블을 만들고 다음 필드를 차원으로 추가합니다.

* `CompanyName`

* `CompanyEmail`

* `CompanyPhoneNum`

결과 테이블

| CompanyName | CompanyEmail | CompanyPhoneNum |
| --- | --- | --- |
| Company A | Company1@example.com | (123) 456-7890 |
| Company B | company2@test.com | 0123456790 |
| Company C | company3@placeholder.com | 234-567-8901 |

동일한 합성 정규 표현식이 다른 정보를 검색하는 데 재사용됩니다. group 인수는 정규 표현식의 두 그룹 중 어느 것을 검색할지 지정하고, field\_no 인수는 전체 문자열에서 찾으려는 전체 일치 항목을 지정합니다.

함수의 ExtractRegEGroupxI() 변형은 대/소문자를 구분하지 않는 검색을 보장합니다.

## 예 3 – ISBN 코드에서 구성 요소를 추출하는 스크립트 로드

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/ExtractRegExGroup.htm)

#### 로드 스크립트 및 결과

개요

데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.

로드 스크립트에는 다음이 포함됩니다.

* 모든 추출에 사용하려는 정규 표현식을 저장하기 위해 변수, `ISBN_RegEx`를 만듭니다.
* 서점이 여러 공급업체로부터 주문하고자 하는 책의 ISBN 코드 집합.

각 ISBN 코드에서 다음을 추출해야 합니다.

* EAN

* 그룹

* 등록자

* 출판

* 체크섬

로드 스크립트

```
SET ISBN_RegEx = 'ISBN[ ]*([0-9]{3})-([0-9]{1})-([0-9]{4})-([0-9]{4})-([0-9]{1})';

ISBN:
LOAD Supplier,
ExtractRegExGroup(Books,'$(ISBN_RegEx)',1) AS EAN,
ExtractRegExGroup(Books,'$(ISBN_RegEx)',2) AS Group,
ExtractRegExGroup(Books,'$(ISBN_RegEx)',3) AS Registrant,
ExtractRegExGroup(Books,'$(ISBN_RegEx)',4) AS Publication,
ExtractRegExGroup(Books,'$(ISBN_RegEx)',5) AS Checksum;
// Split the ISBN with the Group function in a preceding load to avoid generating a cartesian product
LOAD *,
ExtractRegEx(SupplierBooks, '$(ISBN_RegEx)') AS Books
INLINE [
Supplier, SupplierBooks
Supplier 1, ISBN 123-3-1234-1234-0 ISBN 012-2-0123-0123-4 ISBN 000-1-0123-0123-2 ISBN 234-5-2345-2345-1 ISBN 555-2-5555-5555-3 ISBN 222-4-2222-2222-2
Supplier 2, ISBN 000-0-3333-3333-3 ISBN 333-3-3333-3333-3 ISBN 555-1-5151-5151-3 ISBN 232-1-2323-2323-1 ISBN 008-0-7777-7777-3 ISBN 888-0-9999-0000-0
];
```

결과

데이터를 로드하고 시트를 엽니다. 새 테이블을 만들고 다음 필드를 차원으로 추가합니다.

* `Supplier`

* `EAN`

* `Group`

* `Registrant`

* `Publication`

* `Checksum`

결과 테이블

| Supplier | EAN | Group | Registrant | Publication | Checksum |
| --- | --- | --- | --- | --- | --- |
| Supplier 1 | 000 | 1 | 0123 | 0123 | 2 |
| Supplier 1 | 012 | 2 | 0123 | 0123 | 4 |
| Supplier 1 | 123 | 3 | 1234 | 1234 | 0 |
| Supplier 1 | 222 | 4 | 2222 | 2222 | 2 |
| Supplier 1 | 234 | 5 | 2345 | 2345 | 1 |
| Supplier 1 | 555 | 2 | 5555 | 5555 | 3 |
| Supplier 2 | 000 | 0 | 3333 | 3333 | 3 |
| Supplier 2 | 008 | 0 | 7777 | 7777 | 3 |
| Supplier 2 | 232 | 1 | 2323 | 2323 | 1 |
| Supplier 2 | 333 | 3 | 3333 | 3333 | 3 |
| Supplier 2 | 555 | 1 | 5151 | 5151 | 3 |
| Supplier 2 | 888 | 0 | 9999 | 0000 | 0 |

## 예 4 – 비즈니스 연락처 정보 추출을 위한 차트 표현식(ExtractRegEx() 비교 포함)

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/ExtractRegExGroup.htm)

#### 차트 표현식 및 결과

개요

데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.

로드 스크립트에는 다음이 포함됩니다.

* 각 회사 웹사이트에서 찾은 회사에 대한 정보가 포함된 BusinessContactInfo라는 테이블입니다.

* ContactInfo는 회사 이메일 주소와 전화번호를 포함한 무료 문자를 포함하는 필드입니다. 차트 표현식을 사용하여 각 이메일 주소와 전화번호를 추출하려고 합니다.

요구 사항:

* 이메일 주소는 특정 요구 사항과 구문을 충족해야 합니다.

* 전화번호는 10자리의 NANP 전화번호여야 합니다. 지역 번호를 괄호로 묶을 수 있게 하고, 특정 지점에 공백과 하이픈을 허용하려고 합니다.

로드 스크립트

```
BusinessContactInfo:

Load * Inline `
ID	CompanyName	ContactInfo
1	Company A	Email is: Company1@example.com, Phone number is: (123) 456-7890
2	Company B	Email is: company2@test.com, Phone # is: 0123456790
3	Company C	Email is: company3@placeholder.com, Phone no. is: 234-567-8901

` (delimiter is '\t');
```

결과

데이터를 로드하고 시트를 엽니다. 새 테이블을 만들고 이 필드를 차원으로 추가합니다.

* CompanyName

다음 계산 차원을 표에 추가합니다.

* 

  ```
  =ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&*\-_+=~{|}\/.'']{1,50})|(\({0,1}[0-9]{3}\){0,1}[ -]*[0-9]{3}[ -]*[0-9]{4})',1,1)
  ```

* 

  ```
  =ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']+@[a-zA-Z0-9!#$%^&*-_+=~{|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&*\-_+=~{|}\/.'']{1,50})|(\({0,1}[0-9]{3}\){0,1}[ -]*[0-9]{3}[ -]*[0-9]{4})',2,2)
  ```

결과 테이블

| CompanyName | =ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']+@[a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&\*\-\_+=~{\|}\/.'']{1,50})\|(\({0,1}[0-9]{3}\){0,1}[ -]\*[0-9]{3}[ -]\*[0-9]{4})',1,1) | =ExtractRegExGroupI(ContactInfo, '([a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']+@[a-zA-Z0-9!#$%^&\*-\_+=~{\|}\/.'']{1,50}\.[a-zA-Z0-9!#$%^&\*\-\_+=~{\|}\/.'']{1,50})\|(\({0,1}[0-9]{3}\){0,1}[ -]\*[0-9]{3}[ -]\*[0-9]{4})',2,2) |
| --- | --- | --- |
| Company A | Company1@example.com | (123) 456-7890 |
| Company B | company2@test.com | 0123456790 |
| Company C | company3@placeholder.com | 234-567-8901 |

동일한 합성 정규 표현식이 다른 정보를 검색하는 데 재사용됩니다. group 인수는 정규 표현식의 두 그룹 중 어느 것을 검색할지 지정하고, field\_no 인수는 전체 문자열에서 찾으려는 전체 일치 항목을 지정합니다.

함수의 ExtractRegEGroupI() 변형은 대/소문자를 구분하지 않는 검색을 보장합니다.

## 예 5 – URL 구문 분석(ExtractRegEx() 비교 포함)

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/ExtractRegExGroup.htm)

#### 차트 표현식 및 결과

개요

데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.

로드 스크립트에는 다음이 포함됩니다.

* Correspondence라는 이름의 테이블에는 EmailBody라는 이름의 필드에 이메일 메시지 텍스트가 포함되어 있습니다.

* 웹 URL이 포함된 이메일 메시지 콘텐츠.

두 번째 URL이 있으면 이를 다음 구성 요소로 추출하려고 합니다.

* 전체 URL

* 프로토콜

* 도메인

* 경로

단일 정규 표현식을 사용하여 모든 추출을 제어하려고 합니다.

로드 스크립트

```
Correspondence:

Load * Inline `
ID	EmailBody
1	Thanks again for this morning's meeting! You can find the meeting minutes posted here: https://example.com/resourceexample. If you still have any questions, always feel free to ask me or one of the other team members. Here are a few learning resources that might help you: http://www.example.ca/training1.pptx http://www.example.ca/training2.pptx http://www.example.ca/training3.pptx Thanks again!
2	Hi, you'll want to visit our company website for that, it's available at https://www.example.se.
3	Hello all, I just wanted to let you know that our online stores are now up and running! I couldn't be more excited. We are already seeing quite a bit of traffic and volume sold, which is very promising! For Product A, go to https://www.examplestore1.com/products. For Product B, you'll want go to https://www.examplestore2.com/products. Product C, go check out https://www.examplestore3.com/products. Cheers!

` (delimiter is '\t');
```

결과

데이터를 로드하고 시트를 엽니다. 새 테이블을 만들고 이 필드를 차원으로 추가합니다.

* ID

계산 차원을 추가합니다.

* URL 2:

  ```
  =ExtractRegEx(EmailBody,'([a-zA-Z0-9]+):\/\/(([a-zA-Z0-9]+\.)*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+))((\/[a-zA-Z0-9]+)*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))?',2)
  ```

* URL 2 프로토콜:

  ```
  =ExtractRegExGroup(EmailBody,'([a-zA-Z0-9]+):\/\/(([a-zA-Z0-9]+\.)*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+))((\/[a-zA-Z0-9]+)*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))?',1,2)
  ```

* URL 2 도메인:

  ```
  =ExtractRegExGroup(EmailBody,'([a-zA-Z0-9]+):\/\/(([a-zA-Z0-9]+\.)*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+))((\/[a-zA-Z0-9]+)*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))?',2,2)
  ```

* URL 2 경로:

  ```
  =ExtractRegExGroup(EmailBody,'([a-zA-Z0-9]+):\/\/(([a-zA-Z0-9]+\.)*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+))((\/[a-zA-Z0-9]+)*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))?',6,2)
  ```

결과 테이블

| ID | URL 2 | URL 2 프로토콜 | URL 2 도메인 | URL 2 경로 |
| --- | --- | --- | --- | --- |
| 1 | http://www.example.ca/training1.pptx | http | www.example.ca | /training1.pptx |
| 2 | - | - | - | - |
| 3 | https://www.examplestore2.com/products | https | www.examplestore2.com | /products |

ExtractRegEx()는 전체 URL을 반환하는 반면, ExtractRegExGroup()은 사용한 group 값에 해당하는 URL의 개별 부분을 반환합니다. ID 값이 2인 레코드에는 URL이 하나만 포함되어 있으므로 해당 데이터는 반환되지 않습니다.

모든 차트 표현식에서 동일한 정규 표현식을 사용하여 서로 다른 정보를 반환합니다. 정규 표현식에 정의된 그룹의 분할은 다음과 같습니다.

정규 표현식의 그룹

| 그룹 번호 | 정규식 | URL 부분 |
| --- | --- | --- |
| 1 | ([a-zA-Z0-9]+) | 프로토콜 |
| 2 | (([a-zA-Z0-9]+\.)\*([a-zA-Z0-9]+)\.([a-zA-Z0-9]+)) | 도메인(그룹 3, 4 및 5) |
| 3 | ([a-zA-Z0-9]+\.)\* | 루트 도메인 |
| 4 | ([a-zA-Z0-9]+) | 최상위 도메인 |
| 5 | ([a-zA-Z0-9]+) | 경로(그룹 7, 8, 9 및 10)(선택 사항) |
| 6 | ((\/[a-zA-Z0-9]+)\*(\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?))? | 하위 디렉터리 |
| 7 | (\/[a-zA-Z0-9]+)\* | 파일(그룹 9 및 10) |
| 8 | (\/([a-zA-Z0-9]+)(\.[a-zA-Z0-9]+)?) | 파일 |
| 9 | ([a-zA-Z0-9]+) | 파일 이름 |
| 10 | (\.[a-zA-Z0-9]+)? | 파일 확장자(선택 사항) |

## 자세한 정보

* [로드 스크립트 및 차트 표현식에서 정규 표현식 사용](https://help.qlik.com/ko-KR/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/regular-expressions-qlik-analytics.htm)