파이썬에서 여러 구분 기호를 기반으로 문자열을 분할하는 방법
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()
메서드는 문자열을 여러 번 트래버스하기 위해 여러 번 사용해야하므로 궁극적으로 정규 표현식을 사용하여 원하지 않는 성능 스파이크를 쉽게 피할 수 있습니다.