스칼라에서 정규식으로 작업하기

Suraj P 2024년2월16일
  1. 스칼라의 Regex 클래스
  2. Scala의 텍스트에서 일치 항목 찾기
  3. Regex를 사용하여 Scala에서 텍스트 바꾸기
  4. Regex를 사용하여 Scala에서 값 추출
  5. 결론
스칼라에서 정규식으로 작업하기

정규식은 입력 데이터를 일치시키는 데 사용되는 공통 패턴을 정의합니다. 이는 패턴 일치 및 텍스트 처리 또는 구문 분석에 매우 유용합니다.

이 기사에서는 스칼라에서 Regex(정규식)를 사용하는 방법을 배웁니다.

스칼라의 Regex 클래스

Regex는 패턴 일치 및 텍스트 구문 분석에 광범위하게 사용되는 Java 패키지 java.util.regex를 기반으로 scala.util.matching.Regex에서 가져온 Scala의 클래스입니다. ‘Regex’ 객체는 두 가지 방법으로 생성할 수 있습니다.

첫 번째 방법은 Regex 클래스 개체를 명시적으로 생성하는 것입니다.

val x = new Regex("you")

두 번째 방법은 r 방법을 사용하는 것입니다.

val x = "You".r

Regex를 사용하여 정규 표현식의 다양한 사용 사례를 살펴보겠습니다.

Scala의 텍스트에서 일치 항목 찾기

텍스트에서 일치 항목을 찾는 것은 Regex의 가장 일반적인 사용 사례 중 하나입니다.

예제 코드:

import scala.util.matching.Regex
object myClass
{
    def main(args: Array[String])
    {
        val x = new Regex("Tony")
        val text = "Iron man is also known as Tony Stark. Tony is an Avenger"

        println(x findFirstIn text)
    }
}

출력:

Some(Tony)

코드 실행

위의 코드에서는 findFirstIn 메서드를 사용하여 정규식의 첫 번째 일치 항목을 찾았고 이 메서드는 Option[String] 개체를 반환합니다.

예제 코드:

import scala.util.matching.Regex
object myClass
{
    def main(args: Array[String])
    {
        val reg = new Regex("([0-9]{2})\\-([0-9]{3})")
        val text = "He lives in Warsaw 01-011 and she lives in Cracow 30-059"

        println((reg findAllIn text).mkString(","))
    }
}

출력:

01-011,30-059

코드 실행

위의 예에서 findAllIn 메소드를 사용하여 모든 일치 항목을 찾고 MatchIterator를 반환했습니다. 그런 다음 mkString 메서드를 사용하여 ,(쉼표)로 구분된 문자열로 출력을 변환했습니다.

findFirstMatchIn 메소드도 있습니다. findFirstIn 메소드처럼 작동하지만 Option[Match]를 반환합니다.

예제 코드:

import scala.util.matching.Regex
object myClass
{
    def main(args: Array[String])
    {
        val reg = new Regex("([0-9]{2})\\-([0-9]{3})")
        val text = "He lives in Warsaw 01-011 and she lives in Cracow 30-059"

        val result = reg.findFirstMatchIn(text)
        println(Some("011"), for (x <- result) yield x.group(2))
    }
}

출력:

(Some(011),Some(011))

코드 실행

Regex를 사용하여 Scala에서 텍스트 바꾸기

이것은 텍스트를 대체하는 Regex의 또 다른 사용 사례입니다. 때때로 텍스트 구문 분석 중 일부를 다른 것으로 대체했을 수 있습니다.

예제 코드:

import scala.util.matching.Regex
object myClass
{
    // Main method
    def main(args: Array[String])
    {
        val reg = new Regex("([0-9]{2})\\-([0-9]{3})")
        val text = "He lives in Warsaw 01-011 and she lives in Cracow 30-059"

        println(reg replaceFirstIn(text, "1234"))
    }
}

출력:

He lives in Warsaw 1234 and she lives in Cracow 30-059

코드 실행

위의 코드에서 replaceFirstIn 메서드를 사용하여 텍스트에서 찾은 첫 번째 일치 항목을 "1234" 문자열로 교체했습니다.

예제 코드:

import scala.util.matching.Regex
object myClass
{
    // Main method
    def main(args: Array[String])
    {
        val reg = new Regex("([0-9]{2})\\-([0-9]{3})")
        val text = "He lives in Warsaw 01-011 and she lives in Cracow 30-059"

        println(reg replaceAllIn(text, "1234"))
   }
}

출력:

He lives in Warsaw 1234 and she lives in Cracow 1234

코드 실행

위의 코드에서 replaceAllIn 메소드를 사용했는데, 이는 텍스트에서 발견된 모든 일치 항목을 "1234"로 대체합니다.

Regex를 사용하여 Scala에서 값 추출

정규 표현식과 일치하는 항목을 찾으면 Regex를 사용하여 패턴 일치를 사용하여 값을 추출할 수 있습니다.

예제 코드:

import scala.util.matching.Regex
object myClass {

    def main(args: Array[String]) {
        val timestamp = "([0-9]{2}):([0-9]{2}):([0-9]{2}).([0-9]{3})".r
        val time = "12:20:01.411" match {
            case timestamp(hour, minutes, _, _) => println(s"It is $minutes minutes after $hour")
        }
    }
}

출력:

It is 20 minutes after 12

코드 실행

Scala에서 Regex는 기본적으로 패턴이 anchor된 것처럼 동작합니다. 예를 들어, 패턴은 ^pattern$과 같은 ^$ 문자 중간에 배치되지만 UnanchoredRegex 클래스에 있는 unanchored 메서드를 사용하여 이러한 문자를 제거할 수 있습니다.

이 도움으로 문자열에 추가 텍스트가 있으면서도 여전히 필요한 것을 찾을 수 있습니다.

예제 코드:

import scala.util.matching.Regex
object myClass
{
    def main(args: Array[String]) {
        val timestamp = "([0-9]{2}):([0-9]{2}):([0-9]{2}).([0-9]{3})".r
        val temp = timestamp.unanchored
        val time = "It is 12:20:01.411 in New York" match {
            case temp(hour, minutes, _, _) => println(s"It is $minutes minutes after $hour")
        }
    }
}

출력:

It is 20 minutes after 12

코드 실행

Java는 Perl 프로그래밍 언어에서 대부분의 정규식과 Regex 기능을 상속하고 Scala는 Java에서 정규식 구문을 상속합니다.

자바에서 가져온 스칼라의 일반적으로 사용되는 정규 표현식을 살펴보자.

하위 표현식 성냥
^ 줄의 시작 부분과 일치합니다.
$ 끝의 시작과 일치합니다.
[...] 대괄호에 있는 단일 문자를 일치시키는 데 사용됩니다.
[^...] 대괄호에 없는 단일 문자를 일치시키는 데 사용됩니다.
\\w 단어 문자를 일치시키는 데 사용됩니다.
\\d 숫자를 일치시키는 데 사용됩니다.

결론

이 기사에서는 Scala 표준 라이브러리에 있는 Regex 클래스에 대해 배웠습니다. 또한 정규 표현식의 다양한 사용 사례를 처리하는 데 도움이 되는 다양한 API를 제공하는 방법도 보았습니다.

작가: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub