파이썬에서 여러 구분 기호를 기반으로 문자열을 분할하는 방법

Dasun Nirmitha 2023년1월30일
  1. 두 개의 분리 문자가있는 Python 분할 문자열
  2. 여러 구분 기호가있는 Python 스플릿 문자열
파이썬에서 여러 구분 기호를 기반으로 문자열을 분할하는 방법

Python 문자열 split() 메서드를 사용하면 구분 기호를 기준으로 문자열을 목록으로 쉽게 분할 할 수 있습니다. 경우에 따라 단 하나의 값뿐만 아니라 여러 개의 구분 기호 값을 기준으로 분리해야 할 수도 있습니다. 이 빠른 101 기사는 파이썬에서 달성 할 수있는 두 가지 편리한 접근 방식을 소개합니다.

두 개의 분리 문자가있는 Python 분할 문자열

다음 문자열을 가정하십시오.

text = "python is, an easy;language; to, learn."

예를 들어, 세미콜론으로 구분하고 공백; , 또는 쉼표 뒤에 공백, 이옵니다. 이 경우 뒤에 공백이없는 단수 세미콜론 또는 쉼표 (예 :,,;)는 염려되지 않아야합니다.

정규식

정규식 사용은 문자열 구문 분석과 관련하여 매우 비싼 특성으로 인해 종종 눈살을 찌푸리게하지만 이와 같은 상황에서는 안전하게 보증 할 수 있습니다.

기본 표현 사용

Python의 내장 모듈re에는이 경우에 사용할 수있는split()메소드가 있습니다.

다중 구분 기호를 구분하기 위해 기본 a 또는 b 정규식 (a|b)을 사용하십시오.

import re

text = "python is, an easy;language; to, learn."
print(re.split("; |, ", text))

출력:

['python is', 'an easy;language', 'to', 'learn.']

Wikipedia page에서 언급했듯이 정규 표현식은 구문의 표준으로 IEEE POSIX를 사용합니다. 이 표준을 참조하면 사용 사례와 일치하는 정규식을 작성하는 방법에 대한 몇 가지 추가 방법을 관리 할 수 ​​있습니다.

구분자를 정의하기 위해 막대 구분 기호 (|)를 사용하는 대신 정규식에 제공된 Range ([]) 구문을 사용하여 동일한 결과를 얻을 수 있습니다. 대괄호 안에 문자를 제공하여 정규식과 일치시킬 수있는 문자 범위를 정의 할 수 있습니다.

따라서 정규 표현식의 패턴을 지정할 때 간단히 대괄호 안에 세미콜론과 쉼표를 제공하고 추가 공백[;,]을 사용하면 정규 표현식이 정확히 [ 세미콜론 또는 쉼표]와 후행 공백.

import re

text = "python is, an easy;language; to, learn."
print(re.split("[;,] ", text))

그것을 기능으로 만드십시오

앞서 언급 한 기본 표현은 하드 코드 된 구분 기호로 제한되었습니다. 이로 인해 나중에 구분 기호 수정이 발생할 때 번거롭고 코드의 다른 부분에서 재사용 성이 제한 될 수 있습니다. 따라서 모범 사례를 사용하여 코드를보다 일반적이고 재사용 가능하게 만드는 것이 좋습니다. 그러므로 그 논리를 파이썬 함수에 코딩하여 우리의 안전을 지키도록하자.

import re

text = "python is, an easy;language; to, learn."
separators = "; ", ", "


def custom_split(sepr_list, str_to_split):
    # create regular expression dynamically
    regular_exp = "|".join(map(re.escape, sepr_list))
    return re.split(regular_exp, str_to_split)


print(custom_split(separators, text))

문자열 함수 사용

정규식 사용을 자제하고 싶거나 문자열 분리를 위해 프로젝트에 새 모듈을 도입 할 필요가없는 경우 replace() 문자열 모듈에있는 및 split() 메소드 같은 결과를 얻기 위해 일종의 해키 방식으로.

text = "python is, an easy;language; to, learn."

# transform [semicolon-space] parts of the string into [comma-space]
text_one_delimiter = text.replace("; ", ", ")

print(text_one_delimiter.split(", "))

먼저, 문자열 내에서 세미콜론 뒤에 나오는; 와 함께 쉼표 뒤에 공백, 이있는 다른 구분 기호로 공백을 대체합니다. 이런 식으로 문자열 분리를 하나의 분리 문자로 제한 할 수 있는데,이 경우 쉼표 뒤에 공백 , 이옵니다.

이제 파이썬 문자열 모듈에 내장 된 간단한split()함수를 사용하여 수정 된 문자열을 안전하게 분할하여 동일한 결과를 얻을 수 있습니다.

이번에는 결과를 달성하기 위해 코드에 새 모듈을 가져 오지 않았습니다.

여러 구분 기호가있는 Python 스플릿 문자열

아래에 언급 된 텍스트를 고려하십시오.

text = "python is# an% easy;language- to, learn."

이 예제에서는 텍스트를# % ; - ,문자가있는 모든 인스턴스에서 분할해야합니다.

정규식

이 경우 정규 표현식을 정의 할 때 추가 구분 기호를 쉽게 추가 할 수 있습니다.

import re

text = "python is# an% easy;language- to, learn."
print(re.split("; |, |# |% |- ", text))

출력:

['python is', 'an', 'easy;language', 'to', 'learn.']

기능으로서

이 상황에서도 우리는 이전에 사용했던 동일한 코드를 두 개의 분리 문자와 함께 사용할 수있다.separators 변수에 모든 추가 구분 기호를 추가하는 간단한 변경으로 가능하다.

import re

text = "python is# an% easy;language- to, learn."
separators = "; ", ", ", "# ", "% ", "- "


def custom_split(sepr_list, str_to_split):
    # create regular expression dynamically
    regular_exp = "|".join(map(re.escape, sepr_list))
    return re.split(regular_exp, str_to_split)


print(custom_split(separators, text))

문자열 함수 사용

이전에 두 개의 구분 기호를 처리 한 방식과 유사하게 replace()split() 함수도이를 처리합니다.

text = "python is, an easy;language; to, learn."

# transform [semicolon-space] parts of the string into [comma-space]
text_one_delimiter = (
    text.replace("# ", ", ").replace("% ", ", ").replace("; ", ", ").replace("- ", ", ")
)

print(text_one_delimiter.split(", "))

출력:

['python is', 'an easy;language', 'to', 'learn.']

이 방법과 같이 더 높은 분리 자 수에 사용될 때는이 방법을 사용하지 않는 것이 좋습니다. 이 경우 문자열replace()메서드는 문자열을 여러 번 트래버스하기 위해 여러 번 사용해야하므로 궁극적으로 정규 표현식을 사용하여 원하지 않는 성능 스파이크를 쉽게 피할 수 있습니다.

관련 문장 - Python String