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

  1. 두 개의 분리 문자가있는 Python 분할 문자열
  2. 여러 구분 기호가있는 Python 스플릿 문자열

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

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

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

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

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

정규식

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

기본 표현 사용

파이썬의 내장 모듈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

  • Python에서 문자열의 여러 문자를 바꾸는 방법
  • 파이썬에서 파일을 한 줄씩 읽는 방법